TypeScript 将参数分配给参数会失去推导出的类型,

yhuiod9q  于 5个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(49)

可能是重复问题,但很难构造一个问题搜索来辨别。
问题出现在 typescript@latest 版本的 3.0.1 中。
考虑到问题的性质,怀疑它在 typescript@next 版本中没有被修复。抱歉没有进行测试。
类型推断错误参数

代码

// A *self-contained* demonstration of the problem follows...
// Just paste this code into your favorite TypeScript IDE
function foobar_good(arg: unknown): void | number {

  if (typeof arg != 'number') {
    return
  }

  return arg;
}

function foobar_bad(arg: unknown): void | number {

  if (typeof arg != 'number') {
    return
  }

  arg = arg;

  return arg;
}

[ts] 类型 'unknown' 不能分配给类型 'number | void'。
类型 'unknown' 不能分配给类型 'void'。

预期行为:

应该编译。

实际行为:

无法编译。

72qzrwbm

72qzrwbm1#

#25720 相关。我们应该将 unknown 的赋值处理为缩小。简化的复现:

function f(p: unknown): number {
	p = 2;
	return p * 2;
}

相关问题