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

新手上路,请多包涵

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

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

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

原文由 Ray Booysen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 848
2 个回答

因为您将 instance 分配给 null 。编译器推断它永远不会是 null 以外的任何东西。所以它假定 else 块永远不应该被执行,所以 instance never

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

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

编辑:

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

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

原文由 Saravana 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于打字稿开发人员…如果您使用 React.useRef() 钩子而不是预先分配 null,请声明并使用变量类型 any。

例子:

 const initialRef: any = null;
const ref = React.useRef(initialRef);

原文由 crystal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进