这类似于#40796374,但这是围绕类型,而我使用接口。

给定下面的代码:

接口Foo { 名称:字符串; } 函数go() { 让实例:Foo | null = null; Let mutator = () => { 实例= { 名称:“字符串” }; }; mutator (); If (instance == null) { console.log('实例为空或未定义'); }其他{ console.log (instance.name); } }

我有一个错误说'属性'名称'不存在类型'从不'。

我不明白实例怎么会是一个“永远”。有人能解释一下吗?


当前回答

如果您以这种方式使用UseState,应该不会有问题

const [data, setData] = useState<any>([]);

在Javascript的情况下,它直接工作,因为所有的数据类型都是Any 默认情况下,Typescript中不是这样的,所以你必须让语言知道:)

其他回答

如果你把Component写成React。FC,使用useState(),

这样写会很有帮助:

const [arr, setArr] = useState<any[]>([])

有时,初始值可能为空。 在这种情况下,你可能会说例子

让val = data。notificationId——>这里它会抛出一个错误。 所以我们可以简单地写出来 let val = data && data. notificationid

因为你把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;

我有什么问题吗?和!

这件作品对我很有用。

if (ref != null){
    if (ref.current != null)
        ref.current.appendChild(child);
}