I am try to filter objects depending on if they have a certain property.
Example:
objectArray = [{a: "", b: ""}, {a: ""}]
objectArray.filter( obj => "b" in obj ).forEach(obj => console.log(**obj.b**))
typescript complains about the obj.b, since some objects doesn't have the b property, but since I filter them out it shouldn't. What am I doing/getting wrong.
CodePudding user response:
Declare objectArray in the same statement where it is initialized (with let or const). This will allow TypeScript to infer the type of the expression objectArray.filter( obj => "b" in obj ) correctly, i.e.
const objectArray = [{a: "", b: ""}, {a: ""}];
objectArray.filter( obj => "b" in obj ).forEach(obj => console.log(obj.b)); // no error
CodePudding user response:
Objects.keys can help you
objectArray.filter(x=> Object.keys(x).indexOf('b')>=0 );
