1.函数接口:
对方法传入的参数以及返回值进行约束——批量约束(即对函数的输入参数和输出结果的约束)
interface encrypt { (key: string, value: string): string; } // 对传入的参数以及返回值进行约束 let md1: encrypt = function (key: string, value: string): string { return key + value; } console.log(md1('张三', '初一一班')); let md2: encrypt = function (key: string, value: string): string { return key + value; } console.log(md2('李四', '初二三班'));
2.可索引接口
对数组、对象的约束
(1)对数组的约束
interface UserArr { [index: number]: string } let arr: UserArr = ['aaa', '111']; console.log(arr[1]);
(2)对对象的约束
interface UserObj { [index: string]: string } let obj: UserObj = { name: '张三', age: '20' } console.log(obj);
3.类类型接口
对类的约束(和抽象类相似)
interface Animal { name: string; eat(str: string): void; } class Dog implements Animal { // 必须包含name name: string; constructor(name: string) { this.name = name; } // 必须包含eat方法 eat() { console.log(this.name + '吃肉'); } } let d = new Dog('达摩'); d.eat();
4.接口的扩展
接口也是可以继承的
// 父接口 interface Animal { eat(): void; } // 子接口继承自父接口 interface Person extends Animal { work(): void; } class Programmer { name: string; constructor(name: string) { this.name = name; } coding() { console.log(this.name + "在写代码"); } }
// 类的继承和接口的继承 class Web extends Programmer implements Person { constructor(name: string) { super(name); } // 由于继承关系,所以这个类必须同时包含父接口和子接口的方法 eat() { console.log(this.name + "在吃饭"); } work() { console.log(this.name + "在工作"); } } let w = new Web('张三'); w.work(); w.eat(); w.coding();