TypeScript 的核心原则之一是对值所具有的结构进行类型检查。我们使用接口(Interfaces)来定义对象的类型。 接口是对象的状态(属性)和行为(方法)的抽象(描述)
接口定义与使用
- 接口类型的对象
多了或者少了属性是不允许的
可选属性: ?
只读属性: readonly
- 需求: 创建人的对象, 需要对人的属性进行一定的约束
id是number类型, 必须有, 只读的
name是string类型, 必须有
age是number类型, 必须有
sex是string类型, 可以没有
(() => {// 定义人的接口,改接口作为person对象的类型使用,限定该对象中的属性数据interface IPerson {// id是只读属性readonly id: numbername: stringage: number// sex可以不存在sex?: string}// 定义一个对象,类型为前面定义的接口IPersonconst person1: IPerson = {id: 1,name: 'tom',age: 20,sex: '男'}console.log(person1)})()// 执行结果// {id: 1, name: "tom", age: 20, sex: "男"}
函数类型
为了使用接口表示函数类型,需要给接口定义一个调用签名 它就像是一个只有参数列表和返回值类型的函数定义,参数列表中的每个参数都需要名字和类型
(() => {// 定义一个接口,作为函数的类型使用interface SearchFunc {(source: string, subString: string): boolean}// 定义一个函数,类型为前面定义的接口IPersonconst mySearch: SearchFunc = function (source: string, sub: string): boolean {// 在source字符串中查找是否存在sub字符串return source.search(sub) > -1}// 调用函数console.log(mySearch('abcd', 'bc'))})()// 输出结果// true
类类型
与 C# 或 Java 里接口的基本作用一样,TypeScript 也能够用它来明确的强制一个类去符合某种契约。 接口中定义的方法,在类中都要实现
类实现接口
(() => {// 定义一个接口,作为类的类型使用interface IFly {// 该方法没有任何的实现(方法中什么都没有)fly()}// 定义一个类,这个类的类型就是上面定义的接口(IFly接口约束了当前这个类)class Person implements IFly {// 实现接口中的方法fly() {console.log('起飞了')}}// 实例化对象const person = new Person()person.fly()})()// 输出结果// 起飞了
一个类可以实现多个接口
(() => {// 定义一个接口,作为类的类型使用interface IFly {// 该方法没有任何的实现(方法中什么都没有)fly()}// 定义另一个接口,作为类的类型使用interface ISay {// 该方法没有任何的实现(方法中什么都没有)say()}// 定义一个类,这个类的类型就是上面定义的接口(IFly接口约束了当前这个类)class Person implements IFly, ISay {// 实现接口中的方法fly() {console.log('起飞了')}say() {console.log('说话了')}}// 实例化对象const person = new Person()person.fly()person.say()})()// 输出结果// 起飞了// 说话了
接口继承接口
和类一样,接口也可以相互继承。 这让我们能够从一个接口里复制成员到另一个接口里,可以更灵活地将接口分割到可重用的模块里。``
(() => {// 定义一个接口,作为类的类型使用interface IFly {// 该方法没有任何的实现(方法中什么都没有)fly()}// 定义另一个接口,作为类的类型使用interface ISay {// 该方法没有任何的实现(方法中什么都没有)say()}// 定义一个接口,它继承了前面两个接口interface IFlyAndISay extends IFly, ISay {}// 定义一个类,这个类的类型就是上面定义的继承接口class Person implements IFlyAndISay {// 实现接口中的方法fly() {console.log('起飞了')}say() {console.log('说话了')}}// 实例化对象const person = new Person()person.fly()person.say()})()// 输出结果// 起飞了// 说话了
