有没有更好的方法在Typescript中创建基于字符串的枚举?

时间:2017-04-22 16:45:59

标签: typescript enums

我正在尝试在Typescript中创建一个基于字符串的枚举,我可以从枚举键映射到枚举值。例如,Vehicle.car应该是'Models.Vehicle.Car'之类的字符串。

我找到了一种有效的方法,但我想知道是否有更直接的解决方案。该解决方案依赖于调用“虚拟”函数来创建我需要的类型。我想知道是否有任何方法可以在不调用虚函数的情况下创建此类型。

我也在寻找避免重复键和/或值映射的解决方案。

以下是代码:

//Creates a type which has keys equal to the values of the passed object
function values<T extends string>(obj: { [key: string]: T }): {[K in T]: T} {
  return undefined;
}

export const Vehicle = {
  car: 'Models.Vehicle.Car',
  bus: 'Models.Vehicle.Bus'
};
const vehicle = values(Vehicle); //Creates a temporary type with keys equal to the values in Vehicle
export type Vehicle = keyof typeof vehicle; //Creates a type like ('Vehicle.Car' | 'Vehicle.Bus')

const v: Vehicle = Vehicle.car; //v equals 'Vehicle.Car'

0 个答案:

没有答案