网站搜索

在 TypeScript 的接口中指定多类型的值:


这是我的代码(使用 TypeScript 2.3.4):

type TokenType =  "operator" | "doubleQuote" | "identifier" | "(end)";



interface Token {
    type: TokenType;
    value: string;
    pos: number;
}

interface PosTokenOp {
    type: "operator" | TokenType ;
    value: string;
    pos: number;
    left: Token | null;
    right: Token | null;
}

所以我希望 PostTokenOp 类型只是:

interface PosTokenOp {
    type: "operator" ;
    value: string;
    pos: number;
    left: Token | null;
    right: Token | null;
}

但是如果我只写“operator”,它不会识别这是 TokenType 的一部分,并且我的代码会出错。

所以我想将 PostTokenOp 的类型设为 "operator",并且明确该 operator 是 TokenType 的一个值。

如果有人有任何关于如何做的想法。

谢谢与问候

答案#1

如果你可以升级到 Typescript 2.4,你可以使用字符串枚举。

例如

enum TokenType{"operator", "doubleQuote", "identifier", "(end)"}

interface Token {
    type: TokenType;
    value: string;
    pos: number;
}

interface PosTokenOp {
    type: TokenType.operator ;
    value: string;
    pos: number;
    left: Token | null;
    right: Token | null;
}

在2.4之前,你可以使用普通的枚举,例如。

enum TokenType { operator, doubleQuote ,identifier , end}

interface Token {
    type: TokenType;
    value: string;
    pos: number;
}

interface PosTokenOp {
    type: TokenType.operator;
}

然后用法就是这样的

 test:PosTokenOp = {
       type: TokenType.operator
    }
 console.log(TokenType[this.test.type]);

相关文章