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

關於接口與類的東西還挺多的,因爲篇幅有限,先到此處吧,更多內容,之後在講

相關文章
相關標籤/搜索