Kosmetika
Kosmetika

Reputation: 21304

TypeScript - Type undefined is not assignable to type ICustomType

I'm quite new to TypeScript and trying to understand what is the best way to approach such situation in my code.

I have array of objects that have a custom type in my system and I use Array.find method to get one of them. However I receive a compile error saying Type 'undefined' is not assignable to type IConfig.

Here's the code example -

const config: IConfig = CONFIGS.find(({ code }) => code === 'default');
// Type 'undefined' is not assignable to type IConfig

I tried to add undefined as possible type but then I get error on the next line which uses this object Object is possibly 'undefined', e.g. -

const config: IConfig | undefined = CONFIGS.find(({ code }) => code === 'default');

// Object is possibly 'undefined'
if (config.foo) {
   return 'bar';
}

What is the best way to approach such type issues?

Upvotes: 0

Views: 524

Answers (1)

CertainPerformance
CertainPerformance

Reputation: 371019

.find will return undefined if nothing in the array passes the callback test. If you're sure that default code exists in the array, then use the non-null assertion operator:

const config: IConfig = CONFIGS.find(({ code }) => code === 'default')!;
//                                                                    ^

(If you weren't sure if it exists in the array, the warning you see is there to prompt you to explicitly test for if the item exists before trying to access a property on it, otherwise you'll sometimes get a runtime error:

const config: IConfig = CONFIGS.find(({ code }) => code === 'default');

if (!config) {
  return 'No match found';
}
if (config.foo) {
   return 'bar';
}

)

Upvotes: 1

Related Questions