2021年3月11日星期四

How do I inform the Typescript compiler that every value of an object has been checked and is defined?

I have the following object whose values are retrieved dynamically. Each function call (getFoo, getBar, etc) can either return a value or undefined.

let ExampleObj = {    foo: getFoo(),    bar: getBar(),    baz: getBaz(),    ...  }     const getFoo:()=>Foo|undefined = () => {...}  ...  

As per an answer to this question here, I'm using Array.every to check that each value in the object is defined, returning undefined if there is even a single undefined value, i.e -

type ExampleObj = {     foo: Foo     bar: Bar     baz: Baz  }    const returnsExampleObj:ExampleObj|undefined = () => {    let exampleObj = {      foo: getFoo(),      bar: getBar(),      baz: getBaz(),    }     return Object.values(exampleObj).every(val => val != undefined) ? exampleObj : undefined;  };  

However, the Typescript linter is unable to infer that I've performed this check so it complains that I'm returning an invalid type (since ExampleObj values can never be undefined). Do I just have to //@ts-ignore this away, or is there a better way of going about this?

https://stackoverflow.com/questions/66592740/how-do-i-inform-the-typescript-compiler-that-every-value-of-an-object-has-been-c March 12, 2021 at 09:02AM

没有评论:

发表评论