为什么不能将类型“U[Extract<keyof U, string>]”分配给类型“(T & U)[Extract<keyof U, string>]”

来源:7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类

FDirector

2021-03-27

老师,您好,这里有一个有关交叉类型无法理解的地方:
我的问题如下:

  1. 既然我们在 for…in 中断言 to 是 T & U 交叉类型,那么按理说 TypeScript 应该可以理解 to 应具有 T 和 U 的全部 key。from 是 U 类型的,所以 from 的 key 也理应存在 to 上,可为什么 TS 还是不允许将 from的 key 映射到 to 上?
  2. 为什么我们将 from[key] 断言为 any 就允许映射了?

extend交叉类型实现extend报错信息

写回答

1回答

ustbhuangyi

2021-03-29

1. from[key] 只包含 U 类型,但不包含 T 类型,而 to 既包含 T 又包含 U,所以无法直接分配
2. as any 后就是任意类型了,相当于绕过了检测。

0
3
FDirector
非常感谢!
2021-04-02
共3条回复

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

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

2629 学习 · 877 问题

查看课程