[英]Typescript does not understand undefined return type when used with optional chaining
我有一個非常簡單的代碼:
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 | 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;
但是如果RootState
中的data
不是可選的,那就很高興了:
interface RootState {
data: {
myData: MyData;
}
}
很高興,因為 TypeScript 編譯器知道?
沒有功能,因為data
不是可選的,不能有值undefined
,也不能有值null
。 所以state.data.myData
和state.data?.myData
做同樣的事情:產生一個MyData
類型的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.