这类似于#40796374,但这是围绕类型,而我使用接口。
给定下面的代码:
接口Foo {
名称:字符串;
}
函数go() {
让实例:Foo | null = null;
Let mutator = () => {
实例= {
名称:“字符串”
};
};
mutator ();
If (instance == null) {
console.log('实例为空或未定义');
}其他{
console.log (instance.name);
}
}
我有一个错误说'属性'名称'不存在类型'从不'。
我不明白实例怎么会是一个“永远”。有人能解释一下吗?
因为你把instance赋值为null。编译器推断它只能是null。所以它假设else块永远不会被执行,所以instance的类型永远不会在else块中。
现在,如果你不将它声明为字面值null,而是通过任何其他方式获取它(例如:let instance: Foo | null = getFoo();),你会看到实例在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
在我的情况下(我使用typescript),我试图模拟假数据的响应,其中数据被分配后。我的第一个尝试是:
let response = {status: 200, data: []};
后来,在分配假数据时,它开始抱怨它不能分配给类型'never[]'。
然后我像这样定义响应,它接受了它。
let dataArr: MyClass[] = [];
let response = {status: 200, data: dataArr};
以及假数据的分配:
response.data = fakeData;