实现接口
明确的强制一个类去符合某种契约
interface Clockinterface {currentTime: DatesetTime(d: Date): void// new (hour: number, minute: number) constructor存在于类的静态部分,所以不在检查的范围内}class Clock implements Clockinterface {currentTime: DatesetTime(d: Date) {this.currentTime = d}constructor(h: number, m: number) {this.currentTime = new Date()}}
静态部分和实力部分的区别
interface ClockConstructor {new(hour: number, minute: number): ClockInterface;}interface ClockInterface {tick(): void}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 digital = createClock(DigitalClock, 12, 17);let analog = createClock(AnalogClock, 7, 32);
接口继承
接口也可以相互继承。
- 这让我们能够从一个接口里复制成员到另一个接口里,可以更灵活地将接口分割到可重用的模块里。
也可以继承多个接口
interface Shape {color: string}interface Square extends Shape {sideLength: number}interface PenStroke {penWidth: number}interface M extends Shape, PenStroke {myNum: number}let square = <Square>{}square.color = 'red'square.sideLength = 10let myObj = <M>{}myObj.myNum = 2myObj.color = 'str'
混合类型
一个对象可以同时具有上面提到的多种类型
interface Counter {(start: number): stringinterval: numberreset(): void}function getCounter(): Counter {let counter = <Counter>function (start: number) { }counter.interval = 2counter.reset = function () { }return counter}let c = getCounter()c(10)c.reset()c.interval = 4
接口继承
class Control {private state: any}interface SelectableControl extends Control {select(): void}class Button extends Control implements SelectableControl {select() { }}class TextBox extends Control {select() { }}// Image缺少 state属性// class Image implements SelectableControl{// select(){}// }
