类型断言某处应用不理解

来源: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回答

ustbhuangyi

2019-04-29

TypeScript 类型断言就相当于你主动告诉编译器,它是一个什么类型,这里是可以把 {} 断言成 Square 的,一旦你断言了,那么 TypeScript 就会认为 square 是一个 Square 类型的,自然就有 color 和 sideLength 属性了。

TypeScript 的类型断言也是有条件的,当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。所以 {} 可以被断言成 Square,但是 let square = 'a' as boolean 就是不允许的

1
1
ysysyg
非常感谢!
2019-04-29
共1条回复

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

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

2631 学习 · 877 问题

查看课程