1.接口的定义
在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到了限制和规范作用。接口定义了某些类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里面的方法实现细节,它只规定这些类里必须提供某些方法,提供这些方法的类可以满足实际需要。typescript中的接口类似于Java,同时还增加了跟灵活的接口类型,包括属性、函数、可索引和类等。
2.接口类型
- 属性类型接口
- 函数类型接口
- 可索引接口
- 类类型接口
- 接口的继承
3.示例
属性类接口
定义JSON规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| interface FullName { readonly id?: number; user: string password: string age?: number } function prontName(name: FullName): void { console.log(name.user, name.password, name.age || ''); } let Name: FullName = { id: 1, user: "张三", password: "123" }
prontName({ user: "张三", password: "123" }) prontName({ user: "张三", password: "123", age: 18 })
|
函数类型接口
约束函数的形参和返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| interface sumType { (a: number, b: number): number }
let sum: sumType = function (a:number, b:number):number { return a + b; } console.log(sum(1,2)); let mySum: (x: number, y: number) => number = function (x: number, y: number): number { return x + y; }; let user: (name: string) => string = function (name){ return name } console.log(mySum(3, 4)); console.log(user("张三"));
|
注意:这里的’=>’不要和ES6中的’=>’混淆了,在 TypeScript 的类型定义中,’=>’用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。在ES6中’=>’叫做箭头函数。
可索引接口
对数组、对象进行约束
对数组的约束
1 2 3 4 5
| interface userArr{ [index: number]: string }
let arr:userArr = ["张三", "李四"]
|
对对象的约束
1 2 3 4 5
| interface userObj{ [index: string]: number }
let Obj:userObj = {age: 123}
|
类类型接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| interface Animal{ name: string hobby(str: string): void }
class person implements Animal{ name: string constructor(name: string){ this.name = name } hobby(str: string){ console.log(this.name + "喜欢" + str || "篮球"); } }
const Person = new person("张三") Person.hobby("打游戏")
|
接口的继承
TS中的继承与ES6中的class继承类似,子接口可以继承父接口使用父接口定义的规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| interface dom { move(): void; } interface Human extends dom { name: string; age: number; }
let jack: Human = { age: 18, name: 'Jack', move() { console.log('move') } }
|