對TS里泛型的理解
概念
- 當(dāng)我們定義一個變量不確定類型的時候有兩種解決方式:
- 使用any(使用any定義時存在的問題:雖然已知道傳入值的類型但是無法獲取函數(shù)返回值的類型;另外也失去了ts類型保護的優(yōu)勢)
- 使用泛型(泛型指的是在定義函數(shù)/接口/類型時,
不預(yù)先指定具體的類型
,而是在使用的時候在指定類型
限制的一種特性。) - 以上來自:TS中的泛型
簡述
- 在 TypeScript 中,泛型是一種參數(shù)化類型的機制,它可以
在不同的數(shù)據(jù)類型之間共享代碼(例如同一個函數(shù),參數(shù)可以是字符數(shù)組,可以是數(shù)字?jǐn)?shù)組,至于是字符還是數(shù)字類型,在構(gòu)造函數(shù)的時候會預(yù)先定義一個類型變量。以便于調(diào)用的時候為其賦值,確認(rèn)何種類型。)
。泛型可以用于函數(shù)、類和接口
等語法結(jié)構(gòu)。
在函數(shù)中使用泛型
可以使用尖括號<>
來表示泛型類型變量
,例如:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString"); // output 的類型為 string
let outputNum = identity<number>(123); // outputNum 的類型為number
這里,函數(shù) identity 接收一個類型為 T 的參數(shù) arg,并返回一個同樣類型的值。
調(diào)用 identity(“myString”) 即表示傳入一個字符串類型的參數(shù)
,并返回一個字符串類型的值
。此時 output 的類型被推斷為 string。
在類中使用泛型
可以在類名后方使用尖括號
來聲明泛型類型變量
,例如:
class GenericNumber<T> {
zeroValue: T; // 此處定義了一個泛型變量 zeroValue
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
此時類 GenericNumber 接收一個泛型類型變量 T
,并在類中使用
了該變量。我們可以創(chuàng)建一個 GenericNumber 的實例,指定 T 為 number 類型
,并可以訪問該實例的屬性和方法。
在接口中使用泛型
可以在定義接口時使用尖括號來聲明泛型類型變量,例如:
interface GenericIdentityFn<T> {
(arg: T): T;
}
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn<number> = identity;
這里,我們定義了一個接口 GenericIdentityFn,并指定它的函數(shù)屬性接受一個類型變量 T 類型的參數(shù),并返回一個同樣類型的值。文章來源:http://www.zghlxwxcb.cn/news/detail-492308.html
我們實現(xiàn)了一個函數(shù) identity,并將其賦值給 myIdentity,同時指定類型變量 T 為 number。文章來源地址http://www.zghlxwxcb.cn/news/detail-492308.html
到了這里,關(guān)于對TS里泛型的理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!