簡體   English   中英

如何通過詳盡的 switch-case 語句獲得一致的返回?

[英]How can I have consistent-return with exhaustive switch-case statements?

我有這樣的代碼:

function (flavors: IceCreamFlavor): 'like'|'dislike' {
    switch (flavors) {
        case IceCreamFlavor.vanilla:
            return 'dislike';
        case IceCreamFlavor.chocolate:
            return 'like';
    }
}

這是詳盡的,我有一個確保詳盡的 eslint 規則。

對於 eslint / typescript,我將consistent-return規則打開,在此期間會抱怨。 不想添加默認值(b/c 如果我添加新的冰淇淋口味,我希望開發人員必須處理它),但是一致返回並沒有意識到這是詳盡無遺的並且會抱怨。

關於如何優雅地處理這個問題的任何想法?

您可以通過添加never返回來表示詳盡無遺。

function (flavors: IceCreamFlavor): 'like'|'dislike' {
    switch (flavors) {
        case IceCreamFlavor.vanilla:
            return 'dislike';
        case IceCreamFlavor.chocolate:
            return 'like';
    }

    const _exhaustiveCheck: never = flavors;
    return _exhaustiveCheck;
}

好的,我發現了我的問題的問題。

consistent-return來自 eslint,它不知道類型,因此沒有“修復”一致返回的好方法來了解這一點。

可能更好的方法是禁用consistent-return ,然后使用typescript-lintexplicit-function-return-type甚至no-unsafe-return或類似的東西。

因為將整個代碼庫轉移到強類型函數的成本非常高,所以您可以提供一個 tslint 規則,該規則執行確實知道類型consistent-return ,但如果您使用的是 ts,您可能只想刪除consistent-return. - consistent-return.

我建議另一種方式:

function (flavors: IceCreamFlavor): 'like'|'dislike' {
    let flavor: string = '';
    
    switch (flavors) {
      case IceCreamFlavor.vanilla:
        flavor = 'dislike';
        break;
      case IceCreamFlavor.chocolate:
        flavor = 'like';
        break;
    }

    return flavor;
}

暫無
暫無

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

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