typescript学习笔记3-接口(1)

2018-06-06  本文已影响0人  scoyzhao

为什么需要接口

上节最后有函数/方法的参数声明,倘若有参数,如:

function func1({ x = 0, y = 0, z = 0 } : { x : number, y = .....}): xx {
  xxx
}

那么就。。。

这个时候就用到了接口,接口的作用是描述结构的形态。

“总结”

如果用接口改写上述代码:

interface point2d {
    x : number
    y : number
}

interface point3d extends point2d {
    z : number
}

function func({ x: 0, y: 0, z: 0}: point3d): string {
    xxx
}

比起上面一个一个写就显得清爽了许多。另外,从例子中可以看出,接口可以通过extnds关键字扩展,扩展后不仅拥有以前的那些字段,还有新加的字段。

描述类

通过关键字implements去描述类。

interface Db {
    readonly host: string
    port: number

    connect(username: string): void
}

class MySQL implements Db {
    readonly host: string
    port: number

    constructor(host: string, port: number) {
        this.host = host
        this.port = port
    }

    connect(uname: string): void {
        console.log(`${uname}正在连接${this.host}:${this.port}`)
    }
}

此外,类的方法也可以写到接口里。

属性修饰符

位置可以在上面的例子里看到

readonly:字面意思。
private和protected:前者似有变量,只有自己内部方法可以访问,不可被继承,而protected可以被继承,可以理解成私房钱和姓氏。
public:和不写一样。
可选属性:在接口属性名后加一个问号,表示可传可不传。

interface Person {
    IdCard: string
    name?: string
}

let person: Person = { IdCard: 'xxxxx' } // 不报错

如果设定一接口,但是我临时想传更多的属性

可以通过:

interface Person {
    IdCard: string
    name?: string
    [propName: string]: any
}

[]里限定里属性名的类型,括号后的any限定了属性的类型。其中propName是可以随便改的。

上一篇 下一篇

猜你喜欢

热点阅读