【发布时间】:2020-09-09 09:30:58
【问题描述】:
我有一个非常简单的代码:
const foo = (state: RootState): MyData => undefined;
这给出了一个错误:
类型“未定义”不可分配给类型“MyData”。
这是相当合理的,因为我的类型 MyData 不允许未定义。
但如果我现在写这个:
const foo = (state: RootState): MyData => state.data?.myData;
然后它编译没有麻烦。我不明白这里发生了什么,因为如果 state.data 未定义,那么它应该真的返回未定义并且对编译器来说应该很明显。
我错过了什么吗?
附:这是类型的最小示例:
type State = {
data: {
myData: MyData;
};
}
type MyData = {
}
【问题讨论】:
-
请向我们展示
RootState和MyData的定义(最小版本)。如果我创建reasonable guesses,TypeScript 会抱怨这两个函数。 -
觉得不重要,我补充一下
-
当我对类型做出合理猜测时,打字稿会在您要求时抱怨(typescriptlang.org/play/…)。也许您的类型定义中的 data 和 myData 永远不会未定义,因此 typescript 推断出可选链接永远不会重要?
-
看来你是对的!没想到,打字稿比我聪明:)
标签: typescript undefined optional-chaining