TypeScript 在数组项的展开后错误地报告了TS2322错误

dohp0rv5  于 9个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(133)

🔎 搜索词

"array spread", "TS2322"

🕗 版本与回归信息

  • 我在尝试的每个版本中都遇到了这种行为,并查阅了关于条目的FAQ。

⏯ Playground链接

https://www.typescriptlang.org/play?#code/MYewdgzgLgBAhgLhgQQE6rgTwDxgK4C2ARgKaowA+M0qAlmAOYB8MAvDANoC6A3AFChIsIkjQYc+YmRbsOAOgVwANDACMvIA

💻 代码

  1. const a: Array<number | string> = [];
  2. const b: Array<number> = [...a, 1];

🙁 实际行为

编译器给出以下两个错误,其中只有一个是合适的:

  1. ~/prog/typescript tsc ./array-spread-error.ts
  2. array-spread-error.ts:2:27 - error TS2322: Type 'string | number' is not assignable to type 'number'.
  3. Type 'string' is not assignable to type 'number'.
  4. 2 const b: Array<number> = [...a, 1];
  5. ~~~~
  6. array-spread-error.ts:2:33 - error TS2322: Type 'string | number' is not assignable to type 'number'.
  7. Type 'string' is not assignable to type 'number'.
  8. 2 const b: Array<number> = [...a, 1];
  9. ~

🙂 预期行为

显然,数组展开是不正确的,因为原始数组可能包含字符串,但数字字面量不应该被标记为相同的错误。

l5tcr1uw

l5tcr1uw1#

这个问题已经被#52850修复了。我在那里推送了一个基于此问题的新测试用例,因为我最初是带着面向对象的用例准备的。

相关问题