关于联合类型的一些疑问

来源:3-23 高级类型 - 交叉类型

年轻人丶

2020-05-16

function extend<T, U> (first: T, second: U): T & U {
  let result = {} as T & U
  for (let id in first) {
    result[id] = first[id] as any
  }
  for (let id in second) {
    if (!result.hasOwnProperty(id)) {
      result[id] = second[id] as any
    }
  }
  return result
}
  1. first: T, second: U中的T,U是代表first,second本身还是内部所有成员?
  2. result[id] = first[id] as any,这段代码result 接受的是T & U类型,但为什么first[id]类型断言为any, 却可以通过,这是为什么?
  3. 为什么这种写法会报错,first[id]改为first[id] as any就可以通过?
function extend<T, U> (first: T, second: U): T & U {
  let result = {} as T & U
  for (let id in first) {
    result[id] = first[id]
  }
  for (let id in second) {
    if (!result.hasOwnProperty(id)) {
      result[id] = second[id]
    }
  }
  return result
}
写回答

1回答

ustbhuangyi

2020-05-17

首先,T 和 U 代表泛型,它跟你实际传入什么类型有关。
其次,first[id] 的类型设置为 any,any 是可以赋值给任何类型的。

0
0

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

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

2631 学习 · 877 问题

查看课程

相似问题