TypeScript 教程
/ 基本泛型
基本泛型
函數(shù)
泛型與函數(shù)結(jié)合使用,有助于制定更具概括性的方法,從而更準(zhǔn)確地表示所使用的類型和返回的類型。
實(shí)例
function createPair<S, T>(v1: S, v2: T): [S, T] { return [v1, v2]; } console.log(createPair<string, number>('hello', 42)); // ['hello', 42]
TypeScript 還可以從函數(shù)參數(shù)推斷泛型參數(shù)的類型。
類
泛型可用于創(chuàng)建廣義類,如 Map。
實(shí)例
class NamedValue<T> { private _value: T | undefined; constructor(private name: string) {} public setValue(value: T) { this._value = value; } public getValue(): T | undefined { return this._value; } public toString(): string { return `${this.name}: ${this._value}`; } } let value = new NamedValue<number>('myNumber'); value.setValue(10); console.log(value.toString()); // myNumber: 10
如果泛型參數(shù)用在構(gòu)造函數(shù)參數(shù)中,TypeScript 也可以推斷出其類型。
類型別名
類型別名中的泛型允許創(chuàng)建更可重用的類型。
實(shí)例
type Wrapped<T> = { value: T }; const wrappedValue: Wrapped<number> = { value: 10 };
這也適用于具有以下語法的接口:interface Wrapped<T> {
默認(rèn)值
如果未指定或推斷出其他值,則可以為泛型分配默認(rèn)值。
實(shí)例
class NamedValue<T = string> { private _value: T | undefined; constructor(private name: string) {} public setValue(value: T) { this._value = value; } public getValue(): T | undefined { return this._value; } public toString(): string { return `${this.name}: ${this._value}`; } } let value = new NamedValue('myNumber'); value.setValue('myValue'); console.log(value.toString()); // myNumber: myValue
擴(kuò)展
可以向泛型添加約束,以限制所允許的內(nèi)容。約束使得在使用泛型類型時(shí)可以依賴于更具體的類型。
實(shí)例
function createLoggedPair<S extends string | number, T extends string | number>(v1: S, v2: T): [S, T] { console.log(`creating pair: v1='${v1}', v2='${v2}'`); return [v1, v2]; }
這可以與默認(rèn)值結(jié)合使用。