'La propiedad no existe en el tipo 'nunca'

Resuelto Ray Booysen asked hace 7 años • 23 respuestas

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?

Ray Booysen avatar May 24 '17 09:05 Ray Booysen
Aceptado

Si escribe el componente como React.FCy lo usa useState(), puede escribirlo así:

const [arr, setArr] = useState<any[]>([])
blue-hope avatar Mar 15 '2020 18:03 blue-hope

Tuve el mismo error y reemplacé la notación de puntos con notación de corchetes para suprimirla.

p.ej:

obj.name -> obj['name']
Eric Grotke avatar Feb 12 '2020 01:02 Eric Grotke

Porque estás asignando instancea 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 instancese escribe como neveren el bloque else.

Ahora, si no lo declara como valor literal nully lo obtiene por cualquier otro medio (por ejemplo let instance: Foo | null = getFoo();:), verá que instanceestará nulldentro del bloque if y Foodentro 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

Saravana avatar May 24 '2017 02:05 Saravana

Si estás usando useRefel gancho React con TypeScript, en lugar de usarlo, anypuedes hacer lo siguiente.

const ref = useRef<HTMLInputElement>(null);
Nivethan avatar Dec 10 '2022 13:12 Nivethan

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
}
Nitzan Tomer avatar May 24 '2017 05:05 Nitzan Tomer