如何使用实现接口制作 Typescript 枚举
Posted
技术标签:
【中文标题】如何使用实现接口制作 Typescript 枚举【英文标题】:How to make Typescript enum with implements interfaces 【发布时间】:2019-06-03 12:21:13 【问题描述】:我当前有这 2 个枚举
所有enum ENNAME
键应仅包括enum POSTAG
键
export enum POSTAG
BAD = 0x80000000,
D_A = 0x40000000,
D_B = 0x20000000,
D_C = 0x10000000,
export enum ENNAME
D_A = 'a',
D_B = 'b',
D_C = 'c',
有没有办法做这样的东西??
export interface ENNAME
[k: keyof POSTAG]: string,
【问题讨论】:
【参考方案1】:您不能让enum
扩展interface
。您可以做的最好的事情是设置一些类型的编译时检查,以便在您出错时产生警告,例如:
interface ENNAMEInterface extends Record<Exclude<keyof typeof POSTAG, "BAD">, string>
type VerifyExtends<T, U extends T> = true
type VerifyENNAME = VerifyExtends<ENNAMEInterface, typeof ENNAME>; // okay
如果值ENNAME
与值POSTAG
(减去"BAD"
)和字符串值具有相同的键,则应该编译。否则VerifyENNAME
会报错:
export enum ENNAME
D_A = 'a',
D_B = 'b',
// oops, D_C is missing
type VerifyENNAME = VerifyExtends<ENNAMEInterface, typeof ENNAME>; // error
// ~~~~~~~~~~~~~
// Property 'D_C' is missing in type 'typeof ENNAME' but required in type 'ENNAMEInterface'.
希望对您有所帮助。祝你好运!
【讨论】:
以上是关于如何使用实现接口制作 Typescript 枚举的主要内容,如果未能解决你的问题,请参考以下文章