如何告诉TypeScript我的函数参数是Enum键?

伯纳·马里亚诺

我有一个将HTTP状态映射到其代码的枚举,如下所示:

在此处输入图片说明

我可以通过访问它们的键轻松获得这些代码(请注意IntelliSenseHttpStatus.NOT_FOUND = 404在右侧面板上的显示方式

在此处输入图片说明

现在,我们有一个名为sendStatus的函数:

我应该如何键入此函数才能使IntelliSense自动完成这些代码?

在此处输入图片说明

使用keyof typeof不起作用,因为它不会自动完成枚举值。

蹲SlavIn运动服

您想要的不是直接可能的。keyof typeof创建联合类型时'CREATED' | 'OK' | 'NOT_FOUND' ...,它与以前的枚举完全不同。

您能获得的最接近的结果是

function sendStatus(code: HttpStatus) {
    // code
}

send(HttpStatus.OK) // This will autocomplete and show the status code numbers

然后将代码转换为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

通常,enum在现代TS中很少有理由使用s。通常,对象和/或联合类型的工作要好得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何告诉 Typescript 在作为函数参数传递时不能取消定义可选数组的项

如何告诉VSCode函数参数的类型(JavaScript)

如何告诉函数使用默认参数值?

如何告诉 TypeScript 我的对象的类型?

如何告诉TypeScript我的属性可以是布尔值还是具有特定签名的函数?

我该如何处理Typescript的可选函数参数?

TypeScript:如何告诉TypeScript我在哪种情况下?

PHP 请告诉我如何访问对象键

如何告诉TypeScript订阅函数的结果是x的数组?

如何告诉gcc在堆栈上不对齐函数参数?

如何告诉PHP在函数调用中使用默认参数?

如何告诉RStudio使用包名称自动完成函数的参数?

如何在TypeScript中表达“以T为参数的函数|字符串,它是T的键”

如何告诉 TypeScript 我正在返回输入类型的数组数组?

Typescript:可以使用enum作为函数参数类型吗?

我该如何在Typescript中使用其中一个参数作为参数的函数?

我如何接受React组件构造函数作为TypeScript中的函数参数

如何让pyautogui告诉我locateOnScreen函数的坐标

如何告诉我的PHP脚本运行Javascript函数?

我们如何将字节作为关键字参数的键传递给函数?

我不确定如何编写用于排序的函数(使用键参数)以及如何使用Lambda表达式重写函数

TypeScript泛型:从函数参数推断键值返回类型的键

TypeScript - 从对象数组中的键获取函数参数

我可以告诉TypeScript泛型类型具有构造函数吗?

PHP:变量函数名称(函数指针)称为;如何告诉IDE我的函数被调用?

我如何使getchar()函数保留退格键

如何从Typescript中的函数获取参数类型

此TypeScript函数参数如何工作

如何检查传递给Typescript函数的参数?