关于混合类型
来源: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回答
-
1. 首先,function(start:number){} TS 会把它推断为类型 (start:number) => void,然后这个类型是不具备 interval 和 reset 属性的,所以报错。其次,Counter 类型是有这俩属性的,所以你只要把这个函数断言成 Counter,就可以添加这俩属性。
2. 类型断言尽量少用,不过也有它的场景,这部分你后面学习实战的时候就会接触到几个场景。032019-06-28
相似问题