[英]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-lint的explicit-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.