请稍等 ...
×

采纳答案成功!

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

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

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

  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回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 FDirector #1
    1. 可是 T & U 具有 T 和 U的全部key,from虽只具有U的key,但按我理解并不应该影响对 T & U的分配操作,毕竟 from 是 T & U的子集。难道 TS 并不理解 from 上有的 key ,T & U 上也应该有的这一点么?
    回复 有任何疑惑可以回复我~ 2021-03-29 23:54:25
  • ustbhuangyi 回复 提问者 FDirector #2
    to 就是既要包含 T 又要包含 U,必须都要满足才可以
    回复 有任何疑惑可以回复我~ 2021-03-30 00:02:27
  • 提问者 FDirector #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-04-02 12:39:04

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信