TypeScript之接口(interface)

75 阅读1分钟

TypeScript的核心原则之一是对值所具有的接口进行类型检查,而接口是实现检查最基础的实现方式

一、对象接口、数组接口、参数接口

接口可以实现对象或者参数接口,来看一个例子:
    interface Person{
        name: string,
        arg: number,
        intro?: string,
    }
    // 也可以基于Person接口实现一个数组接口
    interface PersonArr {
        [index: number]: Person,
        length: number,
        callee: Function
    }

    // 我们来以上面的接口实现一个对象 其中name和arg是必须有的属性,而intro加上了可选参数? 也就是可以忽略
    let som: Person = {
        name: 'som',
        arg: 20,
        intro: 'this is Teacher' // 可以省略
    }
    
    // 也可以用来限制函数参数
    function getPerson (person: Person): void{
        if(person.intro){
            console.log('姓名:'+ person.name +  ',年龄:' + person.arg + ', 简介:'+ person.intro );
        }else{
        console.log('姓名:'+ person.name +  ',年龄:' +person.arg);
    }
    // 定义了参数之后 函数只能传入符合接口定义的参数
    getPerson(som);

二、函数接口

接口也可以定义函数,看一个例子:
// 一个简单的例子
// 接口同样可以定义方法
interface PersonFun{
      // 定义了两个必填参数和一个可选参数
    (name: string, arg: number, intro?: string): void
}

let myFun: PersonFun;
myFun = function(name, arg, intro?){
    if(intro){
        console.log(`姓名:${name},年龄:${arg},简介:${intro}`)
    }else{
        console.log(`姓名:${name},年龄:${arg}`)
    }
}

三、类类型

同样也有类类型的接口
类有静态部分和实例部分这里就不展开说了
interface ClockInterface {
    currentTime: Date,
    // 可以定义方法来用类实现
    setTime(d: Date);
}
// implements 类用来实现类类型接口
class Clock implements ClockInterface{
    currentTime: Date;
    constructor(){}
    setTime(d: Date){
        this.currentTime = d;
    }
}