Ber*_*ano 7 intellisense typescript visual-studio-code
我有一个将 HTTP 状态映射到其代码的枚举,如下所示:
我可以通过访问它们的键轻松获取这些代码(注意 IntelliSenseHttpStatus.NOT_FOUND = 404在右侧面板上的显示方式)
现在假设我有一个名为 sendStatus 的函数:
使用keyof typeof不起作用,因为它不会自动完成枚举值。
Squ*_*uit 10
你想要的不是直接可能的。当您这样做时,keyof typeof您将创建一个'CREATED' | 'OK' | 'NOT_FOUND' ...与曾经的枚举完全分开的联合类型。
你能得到的最接近的是做
function sendStatus(code: HttpStatus) {
// code
}
send(HttpStatus.OK) // This will autocomplete and show the status code numbers
Run Code Online (Sandbox Code Playgroud)
然后在sendStatus函数内部将代码转换为字符串。
在不知道您正在寻找的确切用法的情况下很难说出您真正想要什么,但我会考虑只使用一个普通的旧对象而不是枚举
const HTTP_STATUS = {'OK':200, 'CREATED':201} as const
然后,如果需要,您也可以像这样创建这两种类型
type StringStatus = keyof typeof HTTP_STATUS // 'OK' | 'CREATED'
type NumsStatus = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS] // 200 | 201
Run Code Online (Sandbox Code Playgroud)
通常,enum在现代 TS 中很少有充分的理由使用s。通常对象和/或联合类型可以更好地完成这项工作。
您可以keyof typeof通过运行这样的示例进行测试,这表明 Enum 本身在您的情况下工作正常。
enum HttpStatus {\n OK = 200,\n CREATED = 201\n}\n\nfunction printStatus(code: keyof typeof HttpStatus) {\n const num = HttpStatus[code];\n if (num <= HttpStatus.CREATED) {\n console.log(\'HTTP Status key is: \', code);\n console.log(\'HTTP Status value is: \', num);\n }\n}\n\nprintStatus("OK");\n\n// Prints out\n// > HTTP Status key is: \xe2\x80\x93 "OK"\n// > HTTP Status value is: \xe2\x80\x93 200\n// Which shows that Enum value is being detected properly\nRun Code Online (Sandbox Code Playgroud)\n\nkeyof typeof获取将所有 Enum 键表示为字符串的类型,这就是自动完成行为如此的原因。\n https://www.typescriptlang.org/docs/handbook/enums.html#enums-at-compile-time
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |