传参的问题

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

qq_直皛_0

2020-01-08

interface ClockInterface {
    tick()
}

interface ClockConstructor {
    new(h:number,m:number):ClockInterface
}

function createClock(ctor:ClockConstructor,hour:number,minute:number) : ClockInterface {
    return new ctor(hour,minute)
}

class DigitalClock implements ClockInterface{
    
    constructor(h:number,m:number) {

    }
    tick() {
        console.log('beep beep')
    }

}

class AnalogClock implements ClockInterface {
    constructor(h:number,m:number) {

    }
    tick() {
        console.log('tick tock')
    }
}

let digit = createClock(DigitalClock,12,17)

let analog = createClock(AnalogClock,7,32)

老师这个createClock第一个参数不是构造器接口么,为什么传入的是继承ClockInterface 的类,类型不会不一致么

写回答

1回答

ustbhuangyi

2020-01-08

不会呀,类实现了 ClockInterface 接口,其实是类实现了 tick 方法,而 DigitalClock 和 AnalogClock 本身的构造函数的类型都是匹配 ClockConstructor 接口定义的类型,所以它们可以当做 createClock 函数的参数传入。

0
0

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

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

2631 学习 · 877 问题

查看课程