如何在打字稿接口/类型中将枚举值类型转换为数组?

Posted

技术标签:

【中文标题】如何在打字稿接口/类型中将枚举值类型转换为数组?【英文标题】:How to typecast enum values as an array in typescript's interface/types? 【发布时间】:2021-02-14 20:38:55 【问题描述】:

我想将 interface/types 属性的 prop 类型转换为与枚举值匹配的任何元素的数组。

enum X = 
"one" = 1,
"two" = 2,
"three" = 3,
// .... and so on


interface Y 
 prop: X[] // this array should always contains values from enum only, not necessarily all

(a) prop: ["one", "two"] --- 有效

(b) 属性:["one"] --- 有效

(c) prop: ["one", "XYZ"] --- 无效,如果 "XYZ" 不是枚举的一部分

我不确定我应该如何对我的 prop 进行类型转换,以便它只匹配枚举值列表。

任何帮助将不胜感激!!!

谢谢

【问题讨论】:

您的枚举定义无效。 typescriptlang.org/play?#code/… 枚举成员不能有数字名称.ts(2452) 对不起,这是我的错,我已经纠正了。 所以你想提取枚举键作为一种类型? 【参考方案1】:

您可以尝试创建interface,如下所示 -

var myList = Object.keys(X) as Array<keyof typeof X>;

interface Y 
  prop: typeof myList;

然后吹就是测试:

const test0: Y =  prop: ['one', 'two', 'three'] ; // Valid
const test1: Y =  prop: ['one', 'two'] ; // Valid
const test2: Y =  prop: ['one'] ; //Valid
const test3: Y =  prop: ['one', 'XYZ'] ; //Error
const test4: Y =  prop: ['Two', 'zz'] ; //Error

【讨论】:

以上是关于如何在打字稿接口/类型中将枚举值类型转换为数组?的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中将枚举类型作为参数传递

打字稿从元组/数组值派生联合类型

来自数组类型的打字稿接口

在javascript中将数字转换为数组| angular7的打字稿[重复]

在打字稿中将 JSON 转换为字符串数组

将打字稿接口属性类型转换为联合[重复]