簡體   English   中英

使用 function 縮小 object 屬性

[英]Type narrowing object properties with a function

我有一個具有許多嵌套屬性的復雜類型。 我想要縮小類型。 這似乎適用於基本原語,但是當涉及 object 時,TS 似乎無法使用相同的原則縮小屬性范圍。

type Test = {
    property: string | null
}

const propIsNotNull = (data: Test): boolean => {
    return (data.property !== null)
}

const testData: Test = {
    property: 'nonull'
}

if (propIsNotNull(testData)) {
    console.log(testData.property.toUpperCase())
    //          ~~~~~~~~~~~~~~~~~
    // 'testData.property' is possibly 'null'.(18047)
}

我當然可以將其更改為以下內容,但這會使代碼更難閱讀

if (testData.property !== null) {
    console.log(testData.property.toUpperCase())
}

我真的不想為了使用類型保護而創建一個新類型。 我覺得我缺少一些基本簡單的東西。

沒有類型謂詞的 function 將永遠不會具有任何縮小功能。 您也不需要一個類型來創建類型謂詞。 有多種方法可以重用類型並僅修改您正在檢查的部分。

一種可能的方式如下所示:

const propIsNotNull = (data: Test): data is Test & { 
    property: Exclude<Test["property"], null> 
} => {
    return (data.property !== null)
}

類型謂詞向調用者發出信號,表明data屬於Test類型,並且如果條件為true ,則屬性property不是null


操場

暫無
暫無

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

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