TypeScript中的范型

2021-09-24 15:13:03 字數 1790 閱讀 1833

比如我們有乙個函式,如果不使用范型是這樣的

function getdata(arg: number): number
它只能傳入number型別,如果我們要傳入乙個string型別的是編譯不通過的,所以我們可以寫另乙個函式或者用any型別

function getdata1(arg: string): string 

function getdata2(arg: any): any

那麼問題來了,如果重新寫那麼我們就不能做到復用了,如果用any就不能保證傳進去的型別和傳出來的型別統一,所以我們有了范型

function getdata(arg: t): t 

getdata(123)

getdata(123)

getdata(false)//利用了型別推論,編譯器會根據傳入的引數自動地幫助我們確定t的型別

t:表示范型,具體什麼型別是呼叫的這個方法的時候決定的(注意:t也可以是任意其他字母)

所以范型可以支援不確定的資料型別,傳入的引數和返回值的型別一致。

如果我們想列印乙個陣列的長度

function getlength(arg: t): t
如果這麼做,編譯器會報錯說我們使用了arg的.length屬性,但是沒有地方指明arg具有這個屬性。 記住,這些型別變數代表的是任意型別,所以使用這個函式的人可能傳入的是個數字,而數字是沒有.length屬性的。

現在假設我們想操作t型別的陣列而不直接是t。由於我們操作的是陣列,所以.length屬性是應該存在的。 我們可以像建立其它陣列一樣建立這個陣列:

function getlength(arg: t): t
泛型類使用(<>)括起泛型型別,跟在類名後面。

class minclass

min():t

}return minnum

}}let m = new minclass()

m.add(2)

m.add(6)

m.min() //2

let s = new minclass()

s.add('m')

s.add('c')

s.min()//c

inte***ce configfn

let getdata:configfn = function(value:t):t

通用范型介面:

function getdata(value:t):t

inte***ce configfn

let getdata:configfn= getdata

let getdata1:configfn= getdata

class user

class mysql

}let u = new user()

u.username = '張三'

u.password = '123'

let m = new mysql()

m.add(u)

我們可以通過范型約束來更好的實現上面的**

class mysql

}let u = new user()

u.username = '張三'

u.password = '123'

let my = new mysql()

my.add(u)

TypeScript中的泛型

很多時候我們希望乙個函式或者乙個類可以支援多種資料型別,有很大的靈活性。很多小夥伴可能會想到函式過載,聯合型別,或者any型別等。函式過載 量大,聯合型別冗長。function log value any any雖然使用any型別可以滿足我們的需求,但是缺失型別資訊,這不是我們所希望的,這裡我們就可...

TypeScript中泛型的使用

對於typescript中的泛型,你可以把它理解為引數化型別,把每個引數的型別也封裝成引數的形式,而這個封裝的方式,就是泛型。如果我們要編寫乙個函式,接收兩個引數,這兩個引數可能都為string型別或者都為number型別,最後做拼接操作。對於這個功能,其實通過上面的聯合型別以及型別保護就能實現,但...

范型的轉變

還是回到上次聽講座的時候,第一部分的就是 范型的轉變 其中的內容主要講了瀑布式模型怎麼在一開始就不成立,而因為誤解卻廣為傳播。同時,迭代式開發也並非是瀑布式開發的後繼者或者改良,而是同步發展的另一種對軟體開發的思維方式。也就是另一種范型。呵呵,兩頭牛在聊天,一頭說 最近瘋牛症很流行啊?搞得我擔心的都...