我会将字符串类型的变量传递给外部库方法,该方法具有由定义的文字提示的参数类型之一。以下是对我来说有问题的示例代码。代码有错误:不能将'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 依赖项。
答案 0 :(得分:1)
在首先检查您的字符串确实是string
的值之一之后,您可以使用类型断言从Literal
到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
,以便需要执行此操作的代码可以迭代这些值。但是您已经说过它在外部库中,所以...