Typescript: 使用三元运算符时变量未被识别为字符串文字类型

创建于 2016-11-03  ·  1评论  ·  资料来源: microsoft/TypeScript



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”'。

Question

最有用的评论

这已被讨论过多次。

首先,您要分配给一个 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 中,从未有过文字推断。 开发人员必须明确地这样做。 所以要解决这个问题:

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);
此页面是否有帮助?
0 / 5 - 0 等级