为什么会报错啊?

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

慕莱坞0998854

2019-06-30

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

//
	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反而成了一种累赘啊?

写回答

1回答

ustbhuangyi

2019-06-30

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

0
3
慕标4338813
回复
慕莱坞0998854
老师的意思是result已经申明了是T&U类型的,而first只是T类型,两种类型不一样赋值是不被允许的,就像string[]类型里面不能赋值number类型的值一样,应该是这个意思吧
2019-08-08
共3条回复

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

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

2629 学习 · 877 问题

查看课程