亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

TypeScript泛型工作原理詳解

 更新時間:2024年02月29日 08:26:28   作者:Moment  
TypeScript 憑借其強大的類型系統(tǒng),提供了一項稱為泛型的功能,它使開發(fā)人員能夠編寫可重用和類型安全的代碼,泛型允許您創(chuàng)建可以處理多種類型(而不是單個類型)的組件,本文深入探討了 TypeScript 泛型,提供了詳盡的解釋和代碼示例來說明它們的用法和好處

什么是泛型?

TypeScript 中的泛型允許編寫可處理各種數(shù)據(jù)類型的代碼,同時保持類型安全。它們允許在不犧牲類型檢查的情況下創(chuàng)建可重用的組件、函數(shù)和數(shù)據(jù)結(jié)構(gòu)。

泛型由類型參數(shù)表示,這些參數(shù)充當(dāng)類型的占位符。這些參數(shù)在尖括號 ( <> ) 中指定,可以在整個代碼中用于定義變量類型、函數(shù)參數(shù)、返回類型等。

TypeScript 泛型用例

泛型的基本用法

讓我們從泛型函數(shù)的簡單示例開始:

function identity<T>(arg: T): T {
  return arg;
}

const output = identity<string>("hello");
console.log(output); // hello

在此示例中, identity 是一個采用類型參數(shù)的泛型函數(shù) T 。參數(shù) arg 的類型為 T ,函數(shù)的返回類型也是 T 。調(diào)用 identity<string>("hello") 時,類型參數(shù) T 推斷為 string ,確保類型安全。

如何使用泛型類

泛型不僅限于函數(shù),它們還可以與類一起使用。請考慮以下泛型 Box 類示例:

class Box<T> {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

const box = new Box<number>(42);
console.log(box.getValue()); //  42

這里, Box 是一個帶有類型參數(shù)的泛型類 T 。構(gòu)造函數(shù)采用 type 的值,該 getValue 方法返回 type T T 的值。創(chuàng)建 的實例時 Box ,它只能存儲和返回 類型的 number 值。

如何對泛型應(yīng)用約束

有時,您可能希望限制可用于泛型的類型。TypeScript 允許您使用 extends 關(guān)鍵字指定對類型參數(shù)的約束。讓我們看一個例子

interface Lengthwise {
  length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
  console.log(arg.length);
  return arg;
}

const result = loggingIdentity("hello");
console.log(result); // Output: hello

在此示例中,該 loggingIdentity 函數(shù)采用一個類型參數(shù), T 該參數(shù)必須擴(kuò)展 Lengthwise 接口,從而確保具有 arg length 屬性。此約束允許在不導(dǎo)致編譯錯誤的情況下訪問 length 該屬性。

如何將泛型與接口一起使用

泛型還可以與接口一起使用,以創(chuàng)建靈活且可重用的定義。請看以下示例:

interface Pair<T, U> {
  first: T;
  second: U;
}

let pair: Pair<number, string> = { first: 1, second: "two" };
console.log(pair); // Output: { first: 1, second: "two" }

這里, Pair 是一個具有兩個類型參數(shù) T 和 的接口,分別表示 first 和 second U 屬性的類型。聲明 pair 為 Pair<number, string> 時,它強制要求屬性必須是數(shù)字,并且 first second 屬性必須是字符串。

如何將泛型函數(shù)與數(shù)組一起使用

function reverse<T>(array: T[]): T[] {
  return array.reverse();
}

let numbers: number[] = [1, 2, 3, 4, 5];
let reversedNumbers: number[] = reverse(numbers);
console.log(reversedNumbers); // Output: [5, 4, 3, 2, 1]

在此示例中,該 reverse 函數(shù)采用 type T 的數(shù)組,并返回相同類型的反向數(shù)組。通過使用泛型,該函數(shù)可以處理任何類型的數(shù)組,從而確保類型安全。

如何將泛型約束與 keyof

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

let person = { name: "John", age: 30, city: "New York" };
let age: number = getProperty(person, "age");
console.log(age); // Output: 30

在這里,該 getProperty 函數(shù)接受一個 type 的對象和一個 type T K 的鍵,其中 K 擴(kuò)展了 T 的鍵。然后,它從對象返回相應(yīng)的屬性值。此示例演示如何在訪問對象屬性時使用泛型 keyof 來強制實施類型安全性。

如何使用泛型實用程序函數(shù)

function toArray<T>(value: T): T[] {
  return [value];
}

let numberArray: number[] = toArray(42);
console.log(numberArray); // Output: [42]

let stringArray: string[] = toArray("hello");
console.log(stringArray); // Output: ["hello"]

該函數(shù)將類型的 T 單個值轉(zhuǎn)換為包含該 toArray 值的數(shù)組。這個簡單的實用函數(shù)展示了如何使用泛型來創(chuàng)建可重用的代碼,這些代碼可以毫不費力地適應(yīng)不同的數(shù)據(jù)類型。

如何將泛型接口與函數(shù)一起使用

interface Transformer<T, U> {
  (input: T): U;
}

function uppercase(input: string): string {
  return input.toUpperCase();
}

let transform: Transformer<string, string> = uppercase;
console.log(transform("hello")); // Output: HELLO

在此示例中,我們定義了一個 Transformer 接口,其中包含兩個類型參數(shù) T 和 U ,分別表示輸入和輸出類型。然后,我們聲明一個函數(shù) uppercase 并將其分配給 類型的 Transformer<string, string> 變量 transform 。這演示了如何使用泛型來定義函數(shù)的靈活接口。

總結(jié)

無論是函數(shù)、類還是接口,泛型都為構(gòu)建可伸縮和可維護(hù)的 TypeScript 應(yīng)用程序提供了可靠的機(jī)制。理解和掌握泛型可以顯著提高您編寫高效且無錯誤的代碼的能力。

以上就是TypeScript泛型工作原理詳解的詳細(xì)內(nèi)容,更多關(guān)于TypeScript泛型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript跨域的方法匯總

    javascript跨域的方法匯總

    JavaScript出于安全方面的考慮,不允許跨域調(diào)用其他頁面的對象。但在安全限制的同時也給注入iframe或是ajax應(yīng)用上帶來了不少麻煩。這里把涉及到跨域的一些問題簡單地整理一下
    2015-10-10
  • 一文詳解DOM的概念和常用操作

    一文詳解DOM的概念和常用操作

    本文詳細(xì)介紹了DOM的概念和常用操作,文檔對象模型 (DOM) 是 HTML 和 XML 文檔的編程接口。它提供了對文檔的結(jié)構(gòu)化的表述,并定義了一種方式可以使從程序中對該結(jié)構(gòu)進(jìn)行訪問,從而改變文檔的結(jié)構(gòu),樣式和內(nèi)容,感興趣的朋友可以參考閱讀本文
    2023-04-04
  • JavaScript程序開發(fā)之JS代碼放置的位置

    JavaScript程序開發(fā)之JS代碼放置的位置

    JavaScript在頁面中使用,那么這些JS代碼應(yīng)該放在什么位置呢?接下來通過本文一起學(xué)習(xí)吧
    2016-01-01
  • WebGL高級變換之Matrix4使用介紹

    WebGL高級變換之Matrix4使用介紹

    這篇文章主要為大家介紹了WebGL高級變換之Matrix4使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 瀏覽器緩存技術(shù)實現(xiàn)淺析

    瀏覽器緩存技術(shù)實現(xiàn)淺析

    這篇文章主要為大家介紹了瀏覽器緩存技術(shù)實現(xiàn)淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Blazor實現(xiàn)微信的Tab切換功能

    Blazor實現(xiàn)微信的Tab切換功能

    這篇文章主要介紹了Blazor實現(xiàn)微信的Tab切換功能,本文中的UI組件使用的是MASA?Blazor,您也可以是其他的UI框架,這個并不影響實際的運行效果,本文案例是兼容PC和Android的,演示效果是android中執(zhí)行的,在PC中執(zhí)行效果依然有效,需要的朋友可以參考下
    2023-01-01
  • JavaScript拖拽、碰撞、重力及彈性運動實例分析

    JavaScript拖拽、碰撞、重力及彈性運動實例分析

    這篇文章主要介紹了JavaScript拖拽、碰撞、重力及彈性運動實現(xiàn)方法,涉及JavaScript數(shù)學(xué)運算結(jié)合時間函數(shù)實現(xiàn)運動效果的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • js控制多圖左右滾動切換效果代碼分享

    js控制多圖左右滾動切換效果代碼分享

    這篇文章主要介紹了js控制多圖左右滾動切換效果,很實用的代碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-08-08
  • input type=file 選擇圖片并且實現(xiàn)預(yù)覽效果的實例

    input type=file 選擇圖片并且實現(xiàn)預(yù)覽效果的實例

    下面小編就為大家?guī)硪黄猧nput type=file 選擇圖片并且實現(xiàn)預(yù)覽效果的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 單擊按鈕顯示隱藏子菜單經(jīng)典案例

    單擊按鈕顯示隱藏子菜單經(jīng)典案例

    單擊按鈕實現(xiàn)顯示隱藏子菜單很經(jīng)典的一個案例,接下來為您呈現(xiàn)代碼,需要了解的朋友可以參考下
    2013-01-01

最新評論