簡體   English   中英

Typescript 與可選鏈接一起使用時不理解未定義的返回類型

[英]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 = {

}

聽起來dataRootState中不是可選的。

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.myDatastate.data?.myData做同樣的事情:產生一個MyData類型的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM