请稍等 ...
×

采纳答案成功!

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

为什么会报错啊?

老师在课程中演示的代码如下

//
	let result = {} as T & U
	for(let id in first){
		result[id] = first[id]
	}
//

问题:1> 既然result是T和U的联合类型,为什么报错信息是“Type T is not assignable to type U”?这里只是给对象多赋值一些属性啊,我为什么没看懂这个报错信息?老师能不能解释下这个报错信息?
2> 我们知识想给对象赋值一些属性,如果是js里面就无需关注类型,我感觉TS反而成了一种累赘啊?

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

1回答

ustbhuangyi 2019-06-30 22:27:45

1. result中的元素 是 T & U 类型,而 first 中的元素是 T 类型,不能把 T 类型赋值给 T&U 类型。
2. 这就是 TypeScript 的类型约束,有的时候就是要丧失一些灵活性。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕莱坞0998854 #1
    result 是 T & U类型,result[id] = first[id] ,我们只是给result添加新的属性啊,这是不允许的吗?为什么添加新的属性会被报错为"T类型不能赋值`给T&U类型"
    回复 有任何疑惑可以回复我~ 2019-07-01 19:02:17
  • ustbhuangyi 回复 提问者 慕莱坞0998854 #2
    这就是 TypeScript 的限制
    回复 有任何疑惑可以回复我~ 2019-07-02 10:16:06
  • 慕标4338813 回复 提问者 慕莱坞0998854 #3
    老师的意思是result已经申明了是T&U类型的,而first只是T类型,两种类型不一样赋值是不被允许的,就像string[]类型里面不能赋值number类型的值一样,应该是这个意思吧
    回复 有任何疑惑可以回复我~ 2019-08-08 16:48:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信