typescript探索(二)- 接口与类

为了简便,之后把 typescript简写为 ts

接口Interface

可能有些同窗对于接口比较陌生,在弱类型语言的语言层面很难看到它的踪迹,不像强类型语言,语言层面就考虑到了。但在ts世界里,咱们就能够看到它的踪迹了,说白了,它只负责定义,说明你的对象里面有些什么,也就是结构,固然,它就不可以被实例化了。es6

定义

那么,该如何定义接口呢,固然是使用关键字interfacetypescript

interface IA {
    name: string
}

以上声明了接口IA,有个属性name,为字符串型
这样,咱们就能够给一个变量声明IA类型并赋值初值函数

var a: IA = {
    name: 'hello'
}

继承

接口也是能够继承的,假如你有个IB接口也包含IA的结构,就能够简单的继承它,并扩展本身的属性this

interface IB extends IA {
    id: number
}

类与接口相似,但它除了定义外,还有实现,如给变量赋值,它是能够实例化的code

定义

定义的关键字是class,相信熟悉es6的同窗已经早就用的习觉得常了对象

class A {
    a: string = 'xxxxx'
}

以上定义了类A,它有个字符串类型a,同时给它赋了初值xxxxx,这样咱们能够像下面这样用,实例化它,并能够引用属性a继承

var a = new A()
console.log(a.a)

固然咱们也能够修改属性a接口

共有,私有,受保护等成员访问修饰符

属性有访问权限之分,哪些成员能够访问,谁能够访问ip

  • public 也就是谁均可以访问
  • private 只有内部成员能够访问,说白了,就是自带的函数能够访问
  • protected 受保护的,除了本身,继承了该类的均可以访问

以上关键字通常加在属性前面,不加的话,就是public字符串

所谓成员,不要仅限于属性,还包括方法,也叫函数,可是在类中通常都叫方法
class A {
    public a = 'a'
    private b = 'b'
    protected c = 'c'
}
注意,以上声明的时候没有给属性指定类型,这是合法的,由于能够根据后边的初值推断出相应的类型

构造函数

说到了类,天然是少不了构造函数,这个函数比较特别,是在实例化的时候调用的,也就是new的时候;强类型语言中通常都是以类名来命名的一个函数,ts中是以constructor来定义和实现的,固然严格来讲,是js中是这样规定的。
其实构造函数跟普通函数没什么区别,能够有参数,函数体里面就是实现,能够给属性赋初值等操做,改写以上A,把给a
即便你定义任何构造函数,也会有一个默认构造函数的,只是它什么都没干

class A {
    a: string
    constructor(arg: string) {
        this.a = arg
    }
}

ts中,构造函数还有个神奇的功能,那就是在构造函数参数中定义和赋初值,不用在类中重复声明,在构造函数中赋初值,以下

class A {
    constructor(public a: string)
}

上面咱们就定义了A中的一个字符串属性a,把构造函数的第一个参数赋值给它

继承

跟接口相似,类继承也是用关键字extends

class B extends A {
    d: number = 1
}

实现接口

类不只能够继承已有类,还能够实现接口,要注意的是,接口中的属性,类中必须有相应的实现
实现的关键字是implements

class C implements IA {
    name = 'c'
}

固然你能够实现和继承同时用,也是没问题的

class D extends A implements IA {
    name = 'd'
}

静态成员

普通成员在每一个实例中是单独存在的,而静态成员是在类中共享的,也就是只有一份,静态成员声明的方式是使用关键字static

class A {
    static sa = 'nnnn'
}

以上咱们就声明了一个字符串属性sa,并赋初值nnnn,当须要访问的时候,只要像下面调用就行了

A.sa

关于接口与类的东西还挺多的,因为篇幅有限,先到此处吧,更多内容,之后在讲

相关文章
相关标签/搜索