typescript 接口学习

文章转载自:https://blog.csdn.net/shi_weihappy/article/details/49506717
接口是TypeScript中非常实用的东西,这里我们看一下如何使用接口(Interface),主要的内容为:

认识接口
可选参数
函数类型
数组类型
类类型
接口继承和混合类型
1、认识接口
我们看一个例子:

function printlabel(labelObj:{label:string}) {
    console.log(labelObj.label);
}

var myObj = {label:"Hello lsw"};
printlabel(myObj);

在这里例子中,我们调用可以输出 Hello lsw。但是,如果我们参数修改为 {label: 100},那么编译就会失败,因为在输入参数中我们定义了参数label的类型是string类型。如果这样解释不是很明白的话,那我们看另外的写法,使用interface:

interface labelValue {
    label:string
}
function printlabel(labelObj:labelValue) {
    console.log(labelObj.label);
}
var myObj = {label:"Hello lsw"};
printlabel(myObj);

这里我们定义了一个接口labelValue,参数只有一个label:string。

2、可选属性
接口中的属性并不是都需要显示的,在有些情况下,我们只需要传入部分参数。使用的方式是 (age?:number)这里给出一个例子:

interface USB {
    name:string;
    age?:number;
}

function printUSB(usb:USB) {
    console.log(usb.name);
    if (usb.age) {
        console.log(usb.age);
    }
}

printUSB({name:"lsw"});

这个例子中的age就是可选参数,所以通过 ? 这个声明可以将参数声明为一个可选的参数,在输入的时候我们就可以省略这个参数的输入。

3、函数类型的接口
直接上例子

interface searchFunc {
    (source:string, subString:string):boolean;
}

var mySearch: searchFunc;

mySearch = function(src:string, sub:string) : boolean {
    var flag = src.search(sub);
    return (flag != -1);
};

在这里我们定义了匿名函数mySearch,它的类型就是接口函数类型searchFunc。

4、数组类型

interface StringList {
    [index:number]: string;
}

var myList:StringList = ["lsw", "lm"];
console.log(myList[0]);

这里我们定义了一个字符串数组接口类型

5、类类型

interface ClockInterface {
    currentTime:Date;
    setTime(d:Date);
}

class Clock implements ClockInterface {
    currentTime:Date;
    h:number;
    s:number;
    setTime(d:Date) {
        this.currentTime = d;
    }
    constructor(h:number, s:number) {
        this.h = h;
        this.s = s;
    }
    print() {
        console.log("hello lsw");
    }
}

var c:Clock = new Clock(10, 100);
c.setTime(new Date());
c.print();

这里我们定义了一个类的接口ClockInterface,它有一个参数和一个方法,实现类接口的关键字是 implements,在实现类中我们重写参数和方法就可以实现这个接口。这种实现方式和其他的语言没有什么区别。

6、接口继承和混合类型
接口可以继承,这里给出一个例子:

interface interfaceA {
    a:number;
}
interface interfaceB {
    b:string;
}
interface interfaceC extends interfaceA,interfaceB {
    c:boolean;
}

var interC:interfaceC = <interfaceC>{};
interC.a = 100;
interC.b = "lsw";
interC.c = true;

这里我们需要注意的是使用了接口继承那么调用的时候不是使用new来初始化接口,而是使用<>。同时接口也可以多继承。

对于混合类型的接口我们直接看官方的一个例子:

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;

猜你喜欢

转载自blog.csdn.net/a250758092/article/details/80174872
今日推荐