从枚举值创建 Typescript 类型
Create Typescript Type from Enum values
我正在寻找一种从 ENUM 值创建 Typescript 类型的方法。
目前我必须手动构建类型并使其与 ENUM 保持同步。
有没有办法从 ENUM 值中创建一个类型?最终结果是,当我更新 ENUM 时,类型将自动反映出来
enum FRUITS {
APPLE = 'apple',
PEAR = 'pear',
ORANGE = 'orange',
}
// type Fruits = FRUITS;
type Fruits = 'apple' | 'pear' | 'orange';
// This works
const fruit: Fruits = FRUITS.APPLE;
// This also works
const fruit2: Fruits = 'apple';
该类型将在这些场景中使用,因此两者都必须仍然有效:
const fruit: Fruits = FRUITS.APPLE;
const fruit2: Fruits = 'apple';
我总是建议远离 enum
除非值真的不透明,这意味着你 不需要 需要枚举声明之外的任何 TS 代码来引用 number
/string
作为文字值。 (实际上,我倾向于完全远离数字 enum
,因为所有 number
值都可以分配给它们,请参阅 microsoft/TypeScript#17734 等问题)
对于您的示例中出现的特定用例,我倾向于放弃 enum
并改用强类型枚举对象:
const FRUITS = {
APPLE: 'apple',
PEAR: 'pear',
ORANGE: 'orange',
} as const;
允许以编程方式定义 Fruits
:
type Fruits = typeof FRUITS[keyof typeof FRUITS];
然后您的示例中的所有内容仍然有效:
const fruit: Fruits = FRUITS.APPLE;
const fruit2: Fruits = 'apple';
我正在寻找一种从 ENUM 值创建 Typescript 类型的方法。 目前我必须手动构建类型并使其与 ENUM 保持同步。
有没有办法从 ENUM 值中创建一个类型?最终结果是,当我更新 ENUM 时,类型将自动反映出来
enum FRUITS {
APPLE = 'apple',
PEAR = 'pear',
ORANGE = 'orange',
}
// type Fruits = FRUITS;
type Fruits = 'apple' | 'pear' | 'orange';
// This works
const fruit: Fruits = FRUITS.APPLE;
// This also works
const fruit2: Fruits = 'apple';
该类型将在这些场景中使用,因此两者都必须仍然有效:
const fruit: Fruits = FRUITS.APPLE;
const fruit2: Fruits = 'apple';
我总是建议远离 enum
除非值真的不透明,这意味着你 不需要 需要枚举声明之外的任何 TS 代码来引用 number
/string
作为文字值。 (实际上,我倾向于完全远离数字 enum
,因为所有 number
值都可以分配给它们,请参阅 microsoft/TypeScript#17734 等问题)
对于您的示例中出现的特定用例,我倾向于放弃 enum
并改用强类型枚举对象:
const FRUITS = {
APPLE: 'apple',
PEAR: 'pear',
ORANGE: 'orange',
} as const;
允许以编程方式定义 Fruits
:
type Fruits = typeof FRUITS[keyof typeof FRUITS];
然后您的示例中的所有内容仍然有效:
const fruit: Fruits = FRUITS.APPLE;
const fruit2: Fruits = 'apple';