这是慕课网上构建时钟类,用构造器签名检测构造函数的例子
我将digitalClock类的构造函数没有像ClockConstructor那样写形参,在传入给CreateClock时并未报错,按道理应该会检测呀,求教,编译器是webstorm
interface ClockInterface {
tick():void;
}
interface ClockConstructor{
new(hour:number,minute:number):ClockInterface;
}
function CreateClock(ctor:ClockConstructor,hour:number,minute:number):ClockInterface{
return new ctor(hour,minute);
}
class digitalClock implements ClockInterface {
constructor(){ //构造函数瞎写,期待能检测错误
}
tick(): void {
console.log('beep beep')
}
}
class AnalogClock implements ClockInterface{
constructor(){
}
tick(): void {
console.log('tic toc');
}
}
let digital=CreateClock(digitalClock,12,14);//就是这个地方
如图 未标红出错误
这里没有报错的原因是因为
new ()
这个签名兼容new (hour: number, minute: number)
,相当于是忽略了传入的两个参数,而不能算错。举个例子:这个不能算错是吧?
如果你把实际的构造函数改成
new (hour: string)
,就会看到报错了。