一見如故
- 什么地方用到了泛型:函數(shù)、類型別名、接口、類
- 定義泛型:在這些可以使用泛型的地方后面加尖括號,并寫入‘形參’;
- 使用泛型:在使用的函數(shù)或者類型后面加尖括號并注入類型(有的時候會被自動類型推斷,有時不會)
- 類型約束使用關(guān)鍵詞extends
類型約束
interface WithLength {
length: number
}
function fn<T extends WithLength>(arg: T): T{
const len = arg.length
return arg
}
------------------------------------------
function getProperty<O, K extends keyof O>(obj: O, key: K) {
return obj[key]
}
let obj = {a: 1,b: 2, c: 3, d: 4}
getProperty(obj, 'a') //可以
getProperty(obj, 'e') //不可以
泛型函數(shù)
function fn<T>(arg: T):T {
return T
}
let a = fn(3)
let b = fn('中國')
泛型接口
// 函數(shù)要使用的參數(shù)類型,將來由用戶自己定義
function fn<T>(arg: T): T {
return arg
}
interface Myinterface<T> {
(arg: T): T
}
const str:Myinterface<string> = fn
類型別名使用泛型(編寫通用的輔助類型)
type OrNull<T> = T | null
type OneOrMany<T> = T | T[]
type OneOrManyOrNull<T> = OrNull<OneOrMany<T>>
泛型類
// 類中的某些類型交給用戶自己定義
class MyClass<T> {
value: T
add: (x: T, y: T) => T
}
let instance = new MyClass<number>()
instance.value = 0
instance.add = function(x, y) {
return x + y
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-814928.html
文章來源:http://www.zghlxwxcb.cn/news/detail-814928.html
到了這里,關(guān)于TS-泛型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!