在升级到打字稿3.5后,我看到这个错误了很多。
可以用约束'{}'打字稿错误的另一个子类型实例化
我不知道这是什么意思,它总是指空的{}
类型。
如果您在第34行上查看this playground,我不知道可以用其他子类型实例化什么,甚至子类型也可以。
这是打字稿生成的消息,我认为{}
是添加到错误消息中的默认类型。
This github issue存在,但我仍在努力理解它
答案 0 :(得分:0)
我不理解其余代码的作用,但是眼下的问题归结为:
function map2<A, B>(x: A|undefined, fn: (a: A) => B): B|undefined {
if (x === undefined) {
return x;
} else {
return fn(x);
}
}
这不会检查,因为A
也可以包含undefined
,而TS无法决定是在第一个分支中返回A
还是undefined
。
可以通过告诉TS A
从未被定义来轻松解决:
function map2<A extends {}, B>(x: A|undefined, fn: (a: A) => B): B|undefined {
if (x === undefined) {
return x;
} else {
return fn(x);
}
}