可以用约束'{}'的其他子类型实例化打字稿错误

时间:2019-09-22 10:16:35

标签: typescript

在升级到打字稿3.5后,我看到这个错误了很多。

  

可以用约束'{}'打字稿错误的另一个子类型实例化

我不知道这是什么意思,它总是指空的{}类型。

如果您在第34行上查看this playground,我不知道可以用其他子类型实例化什么,甚至子类型也可以。

这是打字稿生成的消息,我认为{}是添加到错误消息中的默认类型。

This github issue存在,但我仍在努力理解它

1 个答案:

答案 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);
  }
}