参数是数组时,类型变量的捕获机制是怎样的

来源:3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型

ysysyg

2019-05-02

function loggingIdentity<T>(arg: T[]): T[] {
  console.log(arg.length)
  return arg
}

loggingIdentity(['1', 2, '3'])

调用 loggingIdentity 函数的时候,我传递的是一个混合数组,元素有数字类型也有字符串类型。但编译的时候是ok 的,这和我预想的不一样呀。我预想的是我应该要么传递一个数字数组要么传递一个字符串数组这种元素类型一致的数组才能编译通过。

function loggingIdentity<T>,函数名 loggingIdentity 后面有个类型变量 <T>,说明当我们调用这个函数的时候,编译器会帮我们捕获实参的类型。但因为我们的形参是 T[ ],所以编辑器知道按照预期它要捕获的是一个数组的元素的类型,但这里我们调用时传递的是一个元素类型不一致的数组。那它的捕获机制是怎样的?选实参数组的第一个元素的类型作为捕获到的类型?

写回答

1回答

ustbhuangyi

2019-05-02

T 是类型参数,但是你这个调用并没有指定呀
loggingIdentity<string>(['1', 2, '3']) 你再试试

0
2
ustbhuangyi
回复
ysysyg
你的数组中的类型不一致,应该推断为联合类型 string | number
2019-05-02
共2条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程