如何运行时保护我的断言从字符串到文字类型?

时间:2017-12-16 14:51:02

标签: typescript typescript2.0 type-assertion

我正在根据用户输入编写粗略的抽象语法树。在我的AST类型中,我想要有效运算符的类型文字。如何以安全的方式将用户输入(字符串)转换为字符串类型文字?考虑下面的代码段。

type operator = '==' | '!=';

function isOperator(raw: string): raw is operator {
    return ['==', '!='].indexOf(raw) !== -1
}

const parseOperator = (raw: string) => {
    if (isOperator(raw)) {
        return raw
    } else {
        throw new Error('Invalid input')
    }
}

const indata: string[] = ['!=', '!=', '==','a']
const data: operator[] = indata.map(parseOperator)

在代码中,我复制了有效的运算符(一次在类型定义中,稍后在解析逻辑中)。这似乎是构造代码的一种不好的方法,因为更新运算符类型意味着我必须在其他地方更新硬编码数组。

执行此断言的特殊打字方式是什么?

PS。我意识到这个问题:Ways to get string literal type of array values without enum overhead是相关的。尽管如此,对我来说,回答似乎有点讨厌。如果这是最好的解决方案 - 请解释为什么它是一个很好的编码风格。

0 个答案:

没有答案