interface ClockInterface {
setTime(d: Date);
}
class Clock implements ClockInterface {
// I would expect this to raise a compile error
// as it's not implementing the interface
setTime(d) {
// some logic that needs an instance of Date
}
}
var cc = new Clock();
// otherwise it allows you to do any bad stuff you want.
cc.setTime(234);
cc.setTime('234');
cc.setTime([]);
当然,将setTime(d) {
更改为setTime(d: Date) {
会导致在setTime
的最后3次调用中引发警告。
更简单的例子就是:
class Clock implements ClockInterface {
setTime() {
// some logic that needs an instance of Date
}
}
答案 0 :(得分:2)
Liskov Substitution Principle。对于接口,该类是可替换的,因此它implement
它。
当你说implements
是"时,TypeScript执行的唯一检查是可分配给指定接口的类吗?"。考虑这种情况:
interface CatVeterinarian {
checkup(a: Cat): void;
}
interface HumanDoctor {
checkup(a: Human): void;
}
class UniversalDoctor implements CatVeterinarian, HumanDoctor {
checkup(a: Animal) {
// ...
}
}
预设一分钟 错误:你会如何解决?您的UniversalDoctor
课程实际上可以同时充当CatVeterinarian
和HumanDoctor
。你没有什么可做的。
您可以使用非Clock
参数调用Date
这一事实只代表额外的功能 - 接受任意setTime
个参数的能力。显然,编译器说'#34;你的类太多,它不满足那个接口*是荒谬的;几乎每个界面的实现者都会有一些额外的东西'这不是原始界面的一部分。