是否有一種簡單/最佳實踐方法可以將any值轉換為 TypeScript 列舉并在沒有值時拋出例外。
舉個例子
您有一個明確的請求物件并且正在使用該query.option值。您的應用程式知道它只有兩個有效狀態 a|b。然而,互聯網和請求物件的現實是它可以是很多東西(未定義、a、b、foo)。
enum OPTIONS_ENUM {
a = 'a',
b = 'b'
}
function handleRequest(req: Request): OPTIONS_ENUM {
// This will error because query.option is an any
return OPTIONS_ENUM[req.query?.option]
}
我一直在做的事情似乎有點冗長。我在每個列舉旁邊都有一個“強制轉換”函式,如果列舉沒有值,它將拋出。
function castToOptionsEnum(option: any): OPTIONS_ENUM {
if (!Object.values(OPTIONS_ENUM)?.includes(option)) {
throw new Error(`Invalid Value for option, must be one of ${Object.values(OPTIONS_ENUM)}`)
}
// @ts-ignore
return OPTIONS_ENUM[option]
}
function handleRequest(req: Request) {
// This will error because the option query is unknowable
return castToOptionsEnum(req.query?.option)
}
uj5u.com熱心網友回復:
您可以在訪問時“簡單地”option轉換為:OPTIONS_ENUMOPTIONS_ENUMcastToOptionsEnum
function castToOptionsEnum(option: any): OPTIONS_ENUM {
if (!Object.values(OPTIONS_ENUM)?.includes(option)) {
throw new Error(`Invalid Value for option, must be one of ${Object.values(OPTIONS_ENUM)}`);
}
return OPTIONS_ENUM[option as OPTIONS_ENUM];
}
這將洗掉任何編譯錯誤(我建議也洗掉// @ts-ignore,因為它“隱藏”了編譯錯誤——但這取決于你^^)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355649.html
標籤:javascript 打字稿 表达
