轉載node
項目實踐倉庫git
https://github.com/durban89/typescript_demo.git tag: 1.3.2
爲了保證後面的學習演示須要安裝下ts-node,這樣後面的每一個操做都能直接運行看到輸出的結果。github
npm install -D ts-node
後面本身在練習的時候能夠這樣使用typescript
npx ts-node 腳本路徑
上一篇文章的分享,咱們建立了identity通用函數,能夠適用於不一樣的類型。 在此次分享中分享一下函數自己的類型,以及如何建立泛型接口。泛型函數的類型與非泛型函數的類型沒什麼不一樣,只是有一個類型參數在最前面,像函數聲明同樣,以下npm
function identity<T> (arg: T) : T { return arg; } let otherIdentity: <T> (arg: T) => T = identity;
咱們也可使用不一樣的泛型參數名,只要在數量上和使用方式上能對應上就能夠,以下ide
function identity<T> (arg: T) : T { return arg; } let other1Identity: <U> (arg: U) => U = identity;
咱們還可使用帶有調用簽名的對象字面量來定義泛型函數,以下函數
function identity<T> (arg: T) : T { return arg; } let other2Identity: { <U>(arg: U): U } = identity;
這引導咱們去寫第一個泛型接口了。 咱們把上面例子裏的對象字面量拿出來作爲一個接口,以下學習
function identity<T> (arg: T) : T { return arg; } interface GenerateIdentityFunc { <U> (arg: U): U; } let other3Identity: GenerateIdentityFunc = identity;
一個類似的例子,咱們可能想把泛型參數看成整個接口的一個參數。 這樣咱們就能清楚的知道使用的具體是哪一個泛型類型(好比: Dictionary<string>而不僅是Dictionary)。 這樣接口裏的其它成員也能知道這個參數的類型了。spa
function identity<T> (arg: T) : T { return arg; } interface GenerateIdentityFunc1<U> { (arg: U): U } let other4Identity: GenerateIdentityFunc1<number> = identity;
注意,咱們的示例作了少量改動。 再也不描述泛型函數,而是把非泛型函數簽名做爲泛型類型一部分。 當咱們使用 GenerateIdentityFunc1的時候,還得傳入一個類型參數來指定泛型類型(這裏是:number),鎖定了以後代碼裏使用的類型。 對於描述哪部分類型屬於泛型部分來講,理解什麼時候把參數放在調用簽名裏和什麼時候放在接口上是頗有幫助的。code
除了泛型接口,咱們還能夠建立泛型類。 注意,沒法建立泛型枚舉和泛型命名空間。
本實例結束實踐項目地址
https://github.com/durban89/typescript_demo.git tag: 1.3.3