请稍等 ...
×

采纳答案成功!

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

类型断言某处应用不理解

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 就是不允许的

1 回复 有任何疑惑可以回复我~
  • 提问者 ysysyg #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-29 09:49:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信