typescript - typescript : 接口(interface)中多个类型的精确值

标签 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 的类型等于“运算符”,并且准确地说运算符是 TokenType 的值之一。

如果有人知道如何做到这一点。

感谢和问候

最佳答案

如果你可以升级到 Typescript 2.4,你可以使用 String Enums .

例如

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]);

关于typescript - typescript : 接口(interface)中多个类型的精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796795/

相关文章:

javascript - 将最终的 Typsecript 导出包装在模块中?

typescript - 在 typescript 中使用关键字作为标识符

typescript - 如何禁用 `ts` 源映射调试

typescript - 使用 TypeScript 时如何扩充 Hapi.js 服务器方法?

typescript - 递归中断了对重载函数的类型检查

typescript - 如何根据键将函数的参数键入为对象值

Angular 6 : Passing Observable response to another Observable

angular - *ngFor 使用一个函数,返回一个循环

javascript - 如何使用 typescript 将参数传递给 addEventListener 监听器函数?

angularjs - 使用 ClarityIcons 时无法在 'define' 上执行 'CustomElementRegistry'