亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
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é)合使用。