小编典典

'从不'类型上不存在属性

all

这类似于#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);
  }
}

我有一个错误,说“从不”类型上不存在“属性”名称。

我不明白实例怎么可能是“从不”。任何人都可以对此有所了解吗?


阅读 61

收藏
2022-07-01

共1个答案

小编典典

因为你分配instancenull. 编译器推断它永远不会是null. 所以它假定 else
块永远不应该被执行,所以instance就像never在 else 块中一样输入。

现在,如果您不将其声明为字面值null,并通过任何其他方式(例如:)获取它let instance: Foo | null = getFoo();,您将看到instance它将null位于 if 块和Fooelse 块内。

从不输入文档:https ://www.typescriptlang.org/docs/handbook/basic-
types.html#never

编辑:

更新示例中的问题实际上是编译器的一个未解决问题。看:

https://github.com/Microsoft/TypeScript/issues/11498

https://github.com/Microsoft/TypeScript/issues/12176

2022-07-01