這篇文章帶給大家的內容是關於typescript中介面與類別的詳解(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
為了簡便,以後把typescript簡寫為ts
介面Interface
可能有些同學對於介面比較陌生,在弱型別語言的語言層面很難看到它的蹤影,不像強型別語言,語言層面就考慮到了。但在ts世界裡,我們就可以看到它的蹤影了,說穿了,它只負責定義,說明你的物件裡面有些什麼,也就是結構,當然,它就不能夠被實例化了。
定義
那麼,該如何定義介面呢,當然使用關鍵字interface
interface IA { name: string }
以上宣告了介面IA,有個屬性name ,為字串型
這樣,我們就可以給一個變數宣告IA型別並賦值初步值
var a: IA = { name: 'hello' }
繼承
介面也是可以繼承的,假如你有IB介面也包含IA的結構,就可以簡單的繼承它,並且擴充自己的屬性
interface IB extends IA { id: number }
類別
類別與介面類似,但它除了定義外,還有實現,如給變數賦值,它是可以實例化的
定義
定義的關鍵字是class,相信熟悉es6的同學已經早就用的習以為常了
class A { a: string = 'xxxxx' }
以上定義了類A,它有個字符串類型a,同時給它賦了初值xxxxx,這樣我們可以像下面這樣用,實例化它,並可以引用屬性a
var a = new A() console.log(a.a)
當然我們也可以修改屬性a
共有,私有,受保護等成員存取修飾符
屬性有存取權之分,哪些成員可以訪問,誰可以訪問
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
關於介面與類別的東西還挺多的,由於篇幅有限,先到此處吧,更多內容,以後在講
以上是typescript中介面與類別的詳解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!