类型断言某处应用不理解
来源:3-12 接口 -类类型+继承接口+混合类型+接口继承类

ysysyg
2019-04-29
interface Shape {
color: string
}
interface Square extends Shape {
sideLength: number
}
let square = {} as Square // 我觉得这一行有问题,应该报错
square.color = 'blue'
square.sideLength = 10
老师这一句代码有疑惑 【 let square = {} as Square 】
Square 接口本身有一个 sideLength 成员,它继承了 Shape 接口也就拥有了 color 成员。sideLength 和 color 都不是可选属性,但 square 变量在声明的时候只是给赋值给一个空的对象字面量。虽然通过类型断言告诉检查器它是一个 Square 类型的,但它的值还是一个空对象,没有 Square 类型的特征呀。
写回答
1回答
-
TypeScript 类型断言就相当于你主动告诉编译器,它是一个什么类型,这里是可以把 {} 断言成 Square 的,一旦你断言了,那么 TypeScript 就会认为 square 是一个 Square 类型的,自然就有 color 和 sideLength 属性了。
TypeScript 的类型断言也是有条件的,当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。所以 {} 可以被断言成 Square,但是 let square = 'a' as boolean 就是不允许的112019-04-29
相似问题