关于混合类型

来源:3-12 接口 -类类型+继承接口+混合类型+接口继承类

慕莱坞0998854

2019-06-26

老师在讲到混合类型的时候,有这么一句代码:

let counter = (function(start:number){}) as Counter
counter.interval = 123
counter.reset = function(){}

我不理解这里为什么要使用类型断言,所以我试着写成一般人的思路:

let counter:Counter
counter = function(start:number){}
counter.interval = 123
counter.reset = function(){}

但是居然报错了,报错信息为 Type ’ (start:number) => void ’ is not assignable to type ‘Counter’ property ‘reset’ is missing in type (start:number) => void

问题有两个:
1>为什么这样写是错误的?
2>我可能有一种错觉,觉得类型断言还是少用一点比较好,什么时候用比较合适呢?

写回答

1回答

ustbhuangyi

2019-06-26

1. 首先,function(start:number){} TS 会把它推断为类型 (start:number) => void,然后这个类型是不具备 interval 和 reset 属性的,所以报错。其次,Counter 类型是有这俩属性的,所以你只要把这个函数断言成 Counter,就可以添加这俩属性。
2. 类型断言尽量少用,不过也有它的场景,这部分你后面学习实战的时候就会接触到几个场景。

0
3
慕莱坞0998854
谢谢老师!
2019-06-28
共3条回复

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

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

2629 学习 · 877 问题

查看课程