我有一个非常简单的代码:
const foo = (state: RootState): MyData => undefined;
这给出了一个错误:
类型“未定义”不能分配给类型“ MyData”。
这很合理,因为我的类型MyData
不允许未定义。
但是如果我现在这样写:
const foo = (state: RootState): MyData => state.data?.myData;
然后它编译就没有麻烦了。我不明白这里发生了什么,因为如果state.data
未定义,那么它实际上应该返回未定义,并且对于编译器来说应该是显而易见的。
我在这里想念什么吗?
PS这是类型的最小示例:
type State = {
data: {
myData: MyData;
};
}
type MyData = {
}
听起来好像data
在中不是可选的RootState
。
TypeScript抱怨这两个函数,因为-正如您所说-MyData | undefined
不能分配给MyData
:
interface RootState {
data?: {
myData: MyData;
}
}
interface MyData {
bar: string;
}
const foo1 = (state: RootState): MyData => undefined;
const foo2 = (state: RootState): MyData => state.data?.myData;
但是,如果data
inRootState
不是可选的则很高兴:
interface RootState {
data: {
myData: MyData;
}
}
之所以高兴,是因为TypeScript编译器知道?
存在非功能性,因为data
它不是可选的,不能具有值undefined
,也不能具有值null
。因此state.data.myData
,state.data?.myData
做同样的事情:产生一个type的值MyData
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句