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

Pass string as variable to literal method type hint

我会将字符串类型的变量传递给外部库方法,该方法具有定义文字暗示的参数类型之一。以下是对我来说有问题的示例代码。代码有错误:Argument of type 'string' is not assignable to parameter of type '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 依赖项,期望一个适配器。

在首先检查您的字符串确实是 Literal:

的值之一之后,您可以使用类型断言从 string 转到 Literal
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,以便需要执行此操作的代码可以遍历这些值。但是你说它在外部库中,所以...