这类似于#40796374,但这是围绕类型,而我正在使用接口。
鉴于以下代码:
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); } }
我有一个错误,说“从不”类型上不存在“属性”名称。
我不明白实例怎么可能是“从不”。任何人都可以对此有所了解吗?
因为你分配instance给null. 编译器推断它永远不会是null. 所以它假定 else 块永远不应该被执行,所以instance就像never在 else 块中一样输入。
instance
null
never
现在,如果您不将其声明为字面值null,并通过任何其他方式(例如:)获取它let instance: Foo | null = getFoo();,您将看到instance它将null位于 if 块和Fooelse 块内。
let instance: Foo | null = getFoo();
Foo
从不输入文档:https ://www.typescriptlang.org/docs/handbook/basic- types.html#never
编辑:
更新示例中的问题实际上是编译器的一个未解决问题。看:
https://github.com/Microsoft/TypeScript/issues/11498 https://github.com/Microsoft/TypeScript/issues/12176