TypeScript 当使用函数联合类型时,返回的元组不匹配兼容类型,

m1m5dgzv  于 6个月前  发布在  TypeScript
关注(0)|答案(7)|浏览(60)

第一个错误尤其奇怪。

TypeScript 版本: 3.7.x-dev.20200104
搜索词:
代码

type C1 = (a: 1) => [0];
type C2 = (a: 2) => [number];
type C3 = (a: 3) => undefined;

declare function f(a: C1 | C3): void;
f(() => [0]);
declare function g(a: C2 | C3): void;
g(() => [0]);

预期行为:

通过

实际行为:

'number' 类型不能分配给 '0' 类型。(2322)
类型 'number[]' 中缺少属性 '0',但在类型 '[number]' 中需要。(2741)

** playground 链接:**http://www.typescriptlang.org/play/index.html?ts=3.8.0-dev.20200104&ssl=1&ssc=1&pln=8&pc=14#code/C4TwDgpgBAwgjFAvFAFAQwFxTgSiQPigG0AGAXQG4AoUSWAJiVUynr0UKIDsBXAWwBGEAE6Ua4aDADMTdFintCPLgBMIAMwCWXCCupU1AYwA2aYdHXLDwTQHsuUdXNgIAPrAVYAbrc16qTiiKxOQ41Eam5o5WNvZQAObOMIzu0jjevv6JQQQhZGFAA
相关问题:

kyxcudwk

kyxcudwk2#

我真的很不确定你为什么会这样想。编译器只是选择一个类型,并不会测量方差。

lnlaulya

lnlaulya3#

尽管关于f()g()的预期参数存在上下文类型信息,但() => [0]的返回类型被扩大为number[]

ulmd4ohb

ulmd4ohb4#

Then can you explain why the following code won't be an error?

declare function f(a: C1): void;
f(() => [0]);
ppcbkaq5

ppcbkaq55#

魔法?(不,我不确定。)

crcmnpdw

crcmnpdw6#

不确定我们应该朝哪个方向前进。

yiytaume

yiytaume7#

@jcalz 你的无用且令人讨厌的评论真的毫无意义。不要碰我的问题。我不是为了和你聊天而发布问题。

相关问题