TypeScript 版本: 2.0.3 / nightly (2.1.0-dev.201xxxxx)
2.0.3
代码
function test(val: 'AAA'|'BBB'){
//xxx
}
let a = true ? 'AAA' : 'BBB';
test(a);
预期行为:
编译成功
实际行为:
有错误:
错误 TS2345:“字符串”类型的参数不可分配给“AAA”类型的参数 | “BBB”'。
这已被讨论过多次。
首先,您要分配给一个 let 变量,这意味着编译器会假设您将来可能想要更改该值,因此它不会为该变量分配字符串文字类型。
此外,在 2.0 中,从未有过文字推断。 开发人员必须明确地这样做。 所以要解决这个问题:
function test(val: 'AAA'|'BBB'){
//xxx
}
let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);
但是在 TypeScript 2.1 中,它会以最严格的方式解释对const
赋值,所以你可以这样做:
function test(val: 'AAA'|'BBB'){
//xxx
}
const a = true ? 'AAA' : 'BBB';
test(a);
最有用的评论
这已被讨论过多次。
首先,您要分配给一个 let 变量,这意味着编译器会假设您将来可能想要更改该值,因此它不会为该变量分配字符串文字类型。
此外,在 2.0 中,从未有过文字推断。 开发人员必须明确地这样做。 所以要解决这个问题:
但是在 TypeScript 2.1 中,它会以最严格的方式解释对
const
赋值,所以你可以这样做: