tengo este codigo:
He copiado y pegado una imagen para que pueda ver el tipo que hereda el mecanografiado.
DataStore.query() devuelve undefined o User . Al final, filtro el resultado con .filter(Boolean) para que no quede undefined .
¿Por qué TypeScript todavía lo hereda como (User | undefined)[] mientras que no es posible que algunos elementos no estén undefined ?
Mi expectativa es: let users: User[]
Typescript no es tan inteligente para detectar lo que realmente está haciendo su predicado para el filtro, ya que puede pasar un predicado arbitrario. Si desea una inferencia de escritura más precisa, puede agregar una protección de tipo en su predicado para ayudar a TS a comprender lo que hace https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates
Por ejemplo,
let users: (number | undefined)[] = []; // TS will infer `usersFilteredA` to (number | undefined)[] let usersFilteredA = users.filter((user) => user !== undefined); // TS will infer `usersFilteredB` to number[] let usersFilteredB = users.filter((user): user is number => user !== undefined);Por lo que puedo decir, TS evaluará el tipo de cada elemento de la matriz dentro del alcance de cada predicado y luego anulará el tipo del objeto de la matriz.