Si encuentras algún problema en tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
porque estás asignando instance
a null
. El compilador infiere que nunca puede ser otra cosa que null
. Por lo tanto, asume que el bloque else nunca debe ejecutarse, por lo que instance
se escribe como never
en el bloque más.
Ahora, si no lo declaras como el valor literal null
y obtenerlo por cualquier otro medio (por ejemplo: let instance: Foo | null = getFoo();
), verás que instance
estarán null
dentro del bloque if y Foo
dentro del bloque else.
Nunca escriba documentación: https://www.typescriptlang.org/docs/handbook/basic-types.html#never
Editar:
El problema en el ejemplo actualizado es en realidad un problema abierto con el compilador. Ver:
https://github.com/Microsoft/TypeScript/issues/11498 https://github.com/Microsoft/TypeScript/issues/12176
si escribe Componente como React.FC y usa useState(),
simplemente escribir así sería útil:
const [arr, setArr] = useState([])
Esto parece ser similar a este problema: Falso “La propiedad no existe en el tipo ‘nunca'” al cambiar el valor dentro de la devolución de llamada con strictNullChecks
que se cierra como un duplicado de este número (discusión): Compensaciones en el análisis de flujo de control.
Esa discusión es bastante larga, si no puede encontrar una buena solución allí, puede intentar esto:
if (instance == null)
console.log('Instance is null or undefined');
else
console.log(instance!.name); // ok now