打字稿:使用“枚举”值作为“类型”
Posted
技术标签:
【中文标题】打字稿:使用“枚举”值作为“类型”【英文标题】:Typescript: Use `enum` values as `type` 【发布时间】:2019-07-09 07:13:19 【问题描述】:我想使用以下enum
的值:
export enum GenFormats
SHORT_LOWER = 'm/f', SHORT_UPPER = 'M/F', FULL = 'Male/Female'
;
如下所示:
export interface IGenderOptions
format: 'm/f' | 'M/F' | 'Male/Female'
;
通过使用类型提取/定义,例如:
some type cast/logic<GenFormats> // Outputs: 'm/f' | 'M/F' | 'Male/Female'
更新问题:
这是我的代码:
export enum EGenderFormats
SHORT_LOWER = 'm/f', SHORT_UPPER = 'M/F', FULL = 'Male/Female'
;
export interface IGenderFormats
SHORT_LOWER: 'm/f'; SHORT_UPPER: 'M/F'; FULL: 'Male/Female';
;
export interface IGenderOptions
format: IGenderFormats[keyof IGenderFormats]
;
const DEFAULTS: IGenderOptions =
format: EGenderFormats.FULL
;
我的问题是,我如何使用单个实体 enum EGenderFormats
或 interface IGenderFormats
而不是两者?
我正在使用 Typescript 3.2.2
谢谢
【问题讨论】:
能否请您在 stackblitz 上发布您的代码并详细说明您的问题? @dileepkumar jami,我已经提供了尽可能多的描述。 getting a type for the values of a string enum的可能重复 @jcalz ,我更新了我的问题,请帮忙。 【参考方案1】:您可以使用 Enum 作为类型:
export enum EGenderFormats
SHORT_LOWER = "m/f",
SHORT_UPPER = "M/F",
FULL = "Male/Female"
type SGenderOptions = "m/f" | "M/F" | "Male/Female"
export interface IGenderOptions
format: EGenderFormats | SGenderOptions;
const DEFAULTS: IGenderOptions =
format: EGenderFormats.FULL
;
const OTHER_DEFAULTS: IGenderOptions =
format: "M/F"
;
【讨论】:
这样做不接受const DEFAULTS: IGenderOptions = format: 'Male/Female' ;
我认为,如果您使用枚举强制执行格式选项,则有理由允许字符串输入。无论哪种方式,除非您使用联合类型,否则您不能同时拥有两个世界。我会用一个例子来更新答案。
我们不能使用一些高级类型功能使用enum
或interface
动态创建type
吗?我正在使用最新的 Typescript。
我不明白你为什么坚持两种方式,我也找不到 TypeScript 方法来声明这种类型。以上是关于打字稿:使用“枚举”值作为“类型”的主要内容,如果未能解决你的问题,请参考以下文章