考慮以下打字稿枚舉:enum MyEnum { A, B, C };如果我想要另一個(gè)類型是該枚舉的鍵的聯(lián)合字符串,則可以執(zhí)行以下操作:type MyEnumKeysAsStrings = keyof typeof MyEnum; // "A" | "B" | "C"這是非常有用的?,F(xiàn)在,我想創(chuàng)建一個(gè)通用類型,以這種方式對(duì)枚舉進(jìn)行通用操作,這樣我可以改為:type MyEnumKeysAsStrings = AnyEnumKeysAsStrings<MyEnum>;我想正確的語(yǔ)法是:type AnyEnumKeysAsStrings<TEnum> = keyof typeof TEnum; // TS Error: 'TEnum' only refers to a type, but is being used as a value here.但這會(huì)產(chǎn)生編譯錯(cuò)誤:“'TEnum'僅引用類型,但在此處被用作值?!边@是意外和悲傷的。我可以通過(guò)以下方式通過(guò)使用泛型聲明的右側(cè)刪除typeof并將其添加到特定類型的聲明中的type參數(shù)中來(lái)解決此問(wèn)題:type AnyEnumAsUntypedKeys<TEnum> = keyof TEnum;type MyEnumKeysAsStrings = AnyEnumAsUntypedKeys<typeof MyEnum>; // works, but not kind to consumer. Ick.不過(guò),我不喜歡這種解決方法,因?yàn)檫@意味著使用者必須記住在通用類型上仔細(xì)地指定typeof。有什么語(yǔ)法可以讓我指定我最初想要的通用類型,以便對(duì)消費(fèi)者友好?
泛型類型獲取枚舉鍵作為打字稿中的聯(lián)合字符串?
蝴蝶刀刀
2019-11-02 14:28:22