如何模拟“T extends enum”通用约束?

Ian*_*emp 11 enums typescript

我已经知道 TypeScript 不允许将枚举作为约束,但是有没有一种方法(即使是一种黑客方法)来获得类似的行为?

export enum StandardSortOrder {
    Default,
    Most,
    Least
}

export enum AlternativeOrder {
    Default,
    High,
    Medium,
    Low
}

export interface IThingThatUsesASortOrder<T extends enum> { // doesn't compile
    sortOrder: T;
}
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 8

Typescript 中没有这样的限制。您能做的最好的事情就是使用枚举的基本类型,在本例中是number(如果您需要使用字符串枚举,那么您将使用stringorstring | number如果您想同时允许两者)

export enum StandardSortOrder {
    Default,
    Most,
    Least
}

export enum AlternativeOrder {
    Default,
    High,
    Medium,
    Low
}

export interface IThingThatUsesASortOrder<T extends number> { 
    sortOrder: T;
}

let a: IThingThatUsesASortOrder<StandardSortOrder>
let a2: IThingThatUsesASortOrder<AlternativeOrder>
Run Code Online (Sandbox Code Playgroud)