如何从Typescript中的枚举分配字符串类型?

时间:2018-11-14 18:01:57

标签: typescript

所以我有一个包含一组字符串的枚举

export enum apiErrors {
    INVALID_SHAPE = "INVALID_SHAPE",
    NOT_FOUND = "NOT_FOUND",
    EXISTS = "EXISTS",
    INVALID_AUTH = "INVALID_AUTH",
    INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR"
}

我定义了如下界面

export interface IApiResponse {
    status: boolean;
    payload: any;
    errorCode?: string; // I want this to be "INVALID_SHAPE" | "NOT_FOUND" and so on...
}

我知道我可以像"INVALID_SHAPE" | "NOT_FOUND" ...

那样定义

但是有没有办法将枚举结构分解为errorCode,使其只能接受其中一个字符串?

1 个答案:

答案 0 :(得分:0)

正如@JBNizet和@AviadP所述,只需将errorCode设置为apiErrors枚举即可。 Typescript会自动确保将实现IApiResponse接口的所有内容errorCode设置为这些值之一。

export enum apiErrors {
   INVALID_SHAPE = "INVALID_SHAPE",
   NOT_FOUND = "NOT_FOUND",
   EXISTS = "EXISTS",
   INVALID_AUTH = "INVALID_AUTH",
   INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR"
}

export interface IApiResponse {
   status: boolean;
   payload: any;
   errorCode?: apiErrors // this is the change
}

// this would now be invalid
const invalidResponse: IApiResponse = {
   status: false,
   payload: {foo: 'bar'},
   errorCode: 'something not in the enum',
};

// this is valid
const validResponse: IApiResponse = {
   status: false,
   payload: {foo: 'bar'},
   errorCode: apiErrors.INVALID_SHAPE,
};

// this is also valid
const anotherValidResponse: IApiResponse = {
   status: true,
   payload: {foo: 'bar'},
   // errorCode isn't included at all
};