'La propiedad no existe en el tipo 'nunca'
Esto es similar a # 40796374 pero se trata de tipos, mientras uso interfaces.
Dado el siguiente código:
interface Foo {
name: string;
}
function go() {
let instance: Foo | null = null;
let mutator = () => {
instance = {
name: 'string'
};
};
mutator();
if (instance == null) {
console.log('Instance is null or undefined');
} else {
console.log(instance.name);
}
}
Recibo un error que dice "El nombre de la propiedad" no existe en el tipo "nunca".
No entiendo cómo una instancia podría ser un "nunca". ¿Alguien puede arrojar algo de luz sobre esto?
Si escribe el componente como React.FC
y lo usa useState()
, puede escribirlo así:
const [arr, setArr] = useState<any[]>([])
Tuve el mismo error y reemplacé la notación de puntos con notación de corchetes para suprimirla.
p.ej:
obj.name -> obj['name']
Porque estás asignando instance
a null
. El compilador infiere que nunca puede ser otra cosa que null
. Por lo tanto, se supone que el bloque else nunca debe ejecutarse, por lo que instance
se escribe como never
en el bloque else.
Ahora, si no lo declara como valor literal null
y lo obtiene por cualquier otro medio (por ejemplo let instance: Foo | null = getFoo();
:), verá que instance
estará 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 del 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 estás usando useRef
el gancho React con TypeScript
, en lugar de usarlo, any
puedes hacer lo siguiente.
const ref = useRef<HTMLInputElement>(null);
Esto parece ser similar a este problema: Falso "La propiedad no existe en el tipo 'nunca'" cuando se cambia el valor dentro de la devolución de llamada constrictNullChecks
, que se cierra como un duplicado de este problema (discusión): Compensaciones en el análisis de flujo de control .
Esa discusión es bastante larga, si no puedes encontrar una buena solución allí, puedes probar esto:
if (instance == null) {
console.log('Instance is null or undefined');
} else {
console.log(instance!.name); // ok now
}