请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

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

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

正在回答 回答被采纳积分+3

1回答

ustbhuangyi 2019-05-02 16:01:10

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

0 回复 有任何疑惑可以回复我~
  • 提问者 ysysyg #1
    不是可以不写的吗?文档上说【第二种方法更普遍。利用了类型推论 -- 即编译器会根据传入的参数自动地帮助我们确定 T 的类型】
    回复 有任何疑惑可以回复我~ 2019-05-02 16:12:13
  • ustbhuangyi 回复 提问者 ysysyg #2
    你的数组中的类型不一致,应该推断为联合类型 string | number
    回复 有任何疑惑可以回复我~ 2019-05-02 16:38:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信