将字符串作为变量传递给文字方法类型提示

时间:2019-11-30 08:56:42

标签: javascript typescript literals

我会将字符串类型的变量传递给外部库方法,该方法具有由定义的文字提示的参数类型之一。以下是对我来说有问题的示例代码。代码有错误:不能将'string'类型的参数分配给'Literal'类型的参数。如何使此代码起作用?

type Literal = 'A' | 'B' | 'C';

function isAWithLiteral(literal:Literal): boolean
{
    return literal === 'A';
}

console.log(isAWithLiteral('B'));
console.log(isAWithLiteral('A'));

function isAWithString(literal: string): boolean
{
    return isAWithLiteral(literal);
}

我想用我的界面完全覆盖外部库。我不会在任何需要一个适配器的代码中都使用 Literal 依赖项。

1 个答案:

答案 0 :(得分:1)

在首先检查您的字符串确实是string的值之一之后,您可以使用类型断言从LiteralLiteral

function isAWithString(literal: string): boolean
{
    if (literal !== 'A' && literal !== 'B' && literal !== 'C') {
    {
        throw new Error(`'literal' isn't a Literal: ${literal}`);
    }
    return isAWithLiteral(literal as any as Literal);
}

如果Literal是您自己的代码,建议您改用enum,以便需要执行此操作的代码可以迭代这些值。但是您已经说过它在外部库中,所以...