gpt4 book ai didi

typescript - 如何从 TypeScript 中的字符串数组创建类型?

转载 作者:行者123 更新时间:2023-12-03 14:52:01 35 4
gpt4 key购买 nike

基于字符串数组制作 TypeScript 类型的最佳方法是什么?我使用的是 2.6.2 版。该数组很长,我不想通过复制 Enum 声明中的字符串值来重复自己。

我想做的是这样的:

const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
export type Color = convertStringArrayToType(colors);

以下解决方案 (source)工作正常,但感觉 hacky:
/** Utility function to create a K:V from a list of strings */
function strEnum<T extends string>(o: Array<T>): {[K in T]: K} {
return o.reduce((res, key) => {
res[key] = key;
return res;
}, Object.create(null));
}

/**
* Sample create a string enum
*/

/** Create a K:V */
const Direction = strEnum([
'North',
'South',
'East',
'West'
])
/** Create a Type */
type Direction = keyof typeof Direction;

最佳答案

从 Typescript 3.4 开始,你可以使用 as const并从数组生成联合类型如下

const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'] as const;
export type Color = typeof colors[number]; // 'red'|'orange'|'yellow'|'green'|'blue'|'indigo'|'violet'

关于typescript - 如何从 TypeScript 中的字符串数组创建类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521808/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com