国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04

這篇具有很好參考價(jià)值的文章主要介紹了ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

大家好,我是王天~

這篇文章是 ts入門指南系列中第四篇,主要講解ts中的泛型應(yīng)用,泛型在ts中是比較重要的概念,我花挺長時(shí)間才搞明白的,希望能幫助到大家 ~

** ts 入門指南系列 **

  1. Ts和Js 誰更適合前端開發(fā)?| typescript 入門指南 01
  2. 詳解tsconfig.json 配置文件 | 02 ts入門指南
  3. ts基礎(chǔ)使用-語法類型 | typescript入門指南 03

1. 前言

我們可以把泛型比喻為一個(gè)類型占位符,它告訴編譯器:“嘿,這里有一個(gè)類型參數(shù),我現(xiàn)在不確定具體是什么類型,但稍后會(huì)告訴你?!?/p>

通過使用泛型,我們可以編寫更靈活、更可復(fù)用的代碼。它允許我們在定義函數(shù)、類或接口時(shí)使用類型占位符來表示類型,而不直接指定具體的類型。這樣,在實(shí)際使用時(shí),我們可以傳入不同的類型參數(shù),使得代碼可以適用于多種情況。

例如,讓我們看一個(gè)簡單的例子,來解釋泛型的使用。假設(shè)我們有一個(gè)名為 identity 的函數(shù),它接受一個(gè)參數(shù)并返回該參數(shù):

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

ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04 圖片來源網(wǎng)絡(luò)

在上述代碼中,<T> 表示這是一個(gè)泛型函數(shù),T 是一個(gè)類型參數(shù),可以是任何類型。函數(shù)的參數(shù) arg 的類型為 T,返回值的類型也是 T。

這樣,我們可以在函數(shù)調(diào)用時(shí)傳入不同的類型參數(shù),使得函數(shù)適用于各種類型的參數(shù)。

例如,我們可以這樣調(diào)用 identity 函數(shù):

let result1 = identity<number>(42); // 傳入 number 類型
let result2 = identity<string>("Hello, TypeScript"); // 傳入 string 類型

在第一次調(diào)用時(shí),類型參數(shù) number 被傳遞給 identity 函數(shù),所以返回值的類型也是 number。而在第二次調(diào)用時(shí),類型參數(shù) string 被傳遞給 identity 函數(shù),所以返回值的類型是 string。

通過使用泛型,我們可以編寫出更加通用的函數(shù),不限于特定的類型。這樣一來,我們能夠避免代碼的重復(fù)編寫,提高代碼的可復(fù)用性和靈活性。

泛型主要用在四個(gè)場合:函數(shù)、接口、類和別名。

基本使用

泛型使用尖括號(hào) <T> 來表示,并在定義函數(shù)、類或接口時(shí)指定類型參數(shù)。下面是一些基本的使用示例:

// 示例1: 創(chuàng)建一個(gè)泛型函數(shù)
function identity<T>(arg: T): T {
  return arg;
}

// 示例2: 使用泛型函數(shù)
let output = identity<string>("Hello");
console.log(output); // 輸出: Hello

// 示例3: 使用類型推斷,自動(dòng)推斷泛型類型
let output2 = identity("Hello");
console.log(output2); // 輸出: Hello

在示例 1 中,函數(shù) identity 使用了泛型類型參數(shù) T,表示參數(shù)和返回值的類型可以是任何類型。示例 2 和示例 3 展示了如何使用泛型函數(shù)并指定參數(shù)的類型。
。

2. 使用泛型變量:

泛型變量允許我們在函數(shù)或類中使用一種不確定的類型,而在實(shí)際使用時(shí)才確定具體的類型。

舉個(gè)例子,考慮一個(gè)簡單的函數(shù)identity,它接受一個(gè)參數(shù)并返回相同的值:

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

在這個(gè)例子中,我們使用了泛型變量T,它可以代表任意類型。當(dāng)我們調(diào)用函數(shù)identity時(shí),編譯器會(huì)根據(jù)傳入的參數(shù)類型自動(dòng)推斷T的具體類型。

例如:

let result = identity<string>("Hello");
console.log(result); // 輸出:Hello

let value = identity<number>(42);
console.log(value); // 輸出:42

通過使用泛型變量,函數(shù)identity可以適用于不同類型的參數(shù),提供了更高的靈活性和可重用性。

3. 泛型類型:

泛型類型允許我們創(chuàng)建可以適用于不同類型的變量、函數(shù)或類。

舉個(gè)例子,考慮一個(gè)簡單的數(shù)組反轉(zhuǎn)函數(shù)reverse

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

在這個(gè)例子中,我們定義了一個(gè)泛型函數(shù)reverse,接受一個(gè)數(shù)組參數(shù),并返回反轉(zhuǎn)后的數(shù)組。泛型類型T用于指定數(shù)組的元素類型。

例如:

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

let strings: string[] = ["apple", "banana", "orange"];
let reversedStrings = reverse(strings);
console.log(reversedStrings); // 輸出:["orange", "banana", "apple"]

通過使用泛型類型,函數(shù)reverse可以適用于不同類型的數(shù)組,提供了更高的靈活性和可重用性。

4. 泛型類:

泛型類允許我們創(chuàng)建可以適用于多種類型的類。類中的成員可以使用泛型類型進(jìn)行聲明和使用。

舉個(gè)例子,考慮一個(gè)簡單的Box類,用于存儲(chǔ)任意類型的值:

class Box<T> {
  private value: T;

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

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

在這個(gè)例子中,我們定義了一個(gè)泛型類Box,它具有一個(gè)私有成員value和一個(gè)公共方法getValue用于獲取值。

例如:

let box1 = new Box<number>(42);
console.log(box1.getValue()); // 輸出:42

let box2 = new Box<string>("Hello");
console.log(box2.getValue()); // 輸出:Hello

過使用泛型參數(shù)<T>,可以在類的定義中引入類型變量來表示未知的類型。這樣一來,我們可以在類實(shí)例化時(shí)指定具體的類型,從而創(chuàng)建適用于不同類型數(shù)據(jù)的類的實(shí)例。

5. 泛型約束:

泛型約束允許我們限制泛型類型的范圍,使其滿足特定條件

5.1. 確保屬性存在

舉個(gè)例子,假設(shè)我們想編寫一個(gè)函數(shù)getLength,用于獲取對象的長度。但是并不是所有的對象都有length屬性,所以我們需要對泛型類型進(jìn)行約束,確保它具有該屬性。

例如:

interface HasLength {
  length: number;
}

function getLength<T extends HasLength>(obj: T): number {
  return obj.length;
}

在這個(gè)例子中,我們使用泛型約束T extends HasLength來限制泛型類型T必須滿足HasLength接口的要求,即具有length屬性。

例如:

let str = "Hello";
console.log(getLength(str)); // 輸出:5

let arr = [1, 2, 3, 4, 5];
console.log(getLength(arr)); // 輸出:5

通過使用泛型約束,函數(shù)getLength可以接受具有length屬性的對象,并返回其長度。

5.2 檢查對象的 key

1、keyof typescript 中檢測類型的方法,以聯(lián)合類型的方式方返回類型的所有 key
2、搭配泛型約、<T,K extends keyof T >

refshttps://juejin.cn/post/6844904184894980104#heading-0
使用泛型,可以讓我們在編譯前發(fā)現(xiàn)錯(cuò)誤。

6 泛型接口:

泛型接口允許我們定義可以適用于不同類型的接口。

舉個(gè)例子,考慮一個(gè)簡單的Transformer接口,它定義了一個(gè)將輸入值轉(zhuǎn)換為輸出值的轉(zhuǎn)換器:

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

在這個(gè)例子中,我們定義了一個(gè)泛型接口Transformer,它有兩個(gè)類型參數(shù)TU,用于定義輸入類型和輸出類型。

例如,我們可以實(shí)現(xiàn)一個(gè)字符串到數(shù)字的轉(zhuǎn)換器:

class StringToNumberTransformer implements Transformer<string, number> {
  transform(input: string): number {
    return parseFloat(input);
  }
}

通過定義實(shí)現(xiàn)了Transformer接口的類,我們可以創(chuàng)建不同類型的轉(zhuǎn)換器。

例如:

let transformer = new StringToNumberTransformer();
let result = transformer.transform("3.14");
console.log(result); // 輸出:3.14

通過使用泛型接口,我們可以定義可重用、可靈活的接口,適用于不同類型的轉(zhuǎn)換操作。

接口搭配泛型,應(yīng)用在 calss 類上

extend people 約束泛型類 在 people 接口范圍內(nèi)
此時(shí)是 泛型變量占位符,在實(shí)例化 class 類是傳遞類型

interface people {
  name: string;
  age: number;
}

class Popele<T extends people> {
  data: T;
  constructor(data: T) {
    this.data = data;
  }
  hi() {
    return `${this.data.name},,${this.data.age}`;
  }
}

let zhagnsan = new Popele<people>({ name: "張三", age: 18 });

總結(jié)

泛型在 TypeScript 中提供了更靈活、可重用的代碼編寫方式。它可以用于定義函數(shù)、類以及接口,讓我們能夠編寫適用于不同類型的代碼。

讀者朋友好呀,我是王天~

嘗試做過很多事情,汽修專業(yè)肄業(yè)生,半路出道的野生程序員、前端講師、新手作者,最終還是喜歡寫代碼、樂于用文字記錄熱衷分享~

如文章有錯(cuò)誤或者不嚴(yán)謹(jǐn)?shù)牡胤?,期待給于指正,萬分感謝。

如果喜歡或者 有所啟發(fā),歡迎 star,對作者也是一種鼓勵(lì)。

微信:「wangtian3111」,加我進(jìn)王天唯一的讀者群。

個(gè)人博客:https://itwangtian.com文章來源地址http://www.zghlxwxcb.cn/news/detail-710817.html

到了這里,關(guān)于ts 終于搞懂TS中的泛型啦! | typescript 入門指南 04的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 面試題-TS(三):TypeScript 中的接口是什么?它們有什么作用?

    面試題-TS(3):TypeScript 中的接口是什么?它們有什么作用? 在TypeScript中,接口是一種用于定義對象屬性和行為的工具。它們充當(dāng)了代碼之間的契約,描述了對象應(yīng)該具有的屬性和方法。通過使用接口,我們可以提供更好的類型檢查、模塊化和代碼復(fù)用。 一、接口的定義和使

    2024年02月15日
    瀏覽(32)
  • 面試題-TS(五):TypeScript 中的模塊是什么?如何導(dǎo)入和導(dǎo)出模塊?

    面試題-TS(5):TypeScript 中的模塊是什么?如何導(dǎo)入和導(dǎo)出模塊? 在TypeScript中,模塊(Modules)是一種用于組織和管理代碼的概念。模塊提供了一種封裝代碼的方式,允許我們將相關(guān)的功能和數(shù)據(jù)組織在一起,實(shí)現(xiàn)代碼的可重用和可維護(hù)。 一、模塊的概念和作用 模塊是一個(gè)獨(dú)立

    2024年02月15日
    瀏覽(19)
  • Java中的泛型

    Java中的泛型

    定義類、接口、方法時(shí),同時(shí)聲明了一個(gè)或者多個(gè)類型變量(如:),稱為泛型類、泛型接口,泛型方法、它們統(tǒng)稱為泛型。 作用:泛型提供了在編譯階段約束所能操作的數(shù)據(jù)類型,并自動(dòng)進(jìn)行檢查的能力。這樣可以避免強(qiáng)制類型轉(zhuǎn)換,及其可能出現(xiàn)的異常。 泛型的本質(zhì):

    2024年02月01日
    瀏覽(25)
  • C++中的泛型詳細(xì)講解

    它是一種泛化的編程方式,其實(shí)現(xiàn)原理為程序員編寫一個(gè)函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)。允許您延遲編寫類或方法中的編程元素的數(shù)據(jù)類型的規(guī)范,直到實(shí)際在程序中使用它的時(shí)候。換句話說,泛型允許您編寫一個(gè)可以與任何數(shù)據(jù)類型一起工作的類或

    2024年02月12日
    瀏覽(30)
  • Kotlin中的泛型理解與應(yīng)用

    泛型是一種在編程中用于增加代碼的靈活性和重用性的概念。它允許我們編寫可以在多種類型上工作的通用代碼,而不需要為每種類型都編寫不同的代碼。 在Kotlin中,泛型可以應(yīng)用于類、函數(shù)和接口等。下面是一些關(guān)于泛型在Kotlin中的理解和示例。 1、泛型類 泛型類是指可以

    2024年02月07日
    瀏覽(24)
  • python中的泛型使用TypeVar

    PEP484的作者希望借助typing模塊引入類型提示,不改動(dòng)語言的其它部分。通過精巧的元編程技術(shù),讓類支持[]運(yùn)算不成問題。但是方括號(hào)內(nèi)的T變量必須在某處定義,否則要大范圍改動(dòng)python解釋器才能讓泛型支持特殊的[]表示法。 鑒于此,我們增加了typing.TypeVar構(gòu)造函數(shù),把變量

    2024年02月04日
    瀏覽(25)
  • 詳解Java中的泛型(泛型的語法,擦除機(jī)制,泛型的上界)

    詳解Java中的泛型(泛型的語法,擦除機(jī)制,泛型的上界)

    目錄 一.什么是泛型 二.Java中為什么要使用泛型 三.泛型的語法 四.泛型類的使用 五.泛型的編譯機(jī)制(擦除機(jī)制) 六.泛型的上界 泛型(Generics)是Java SE 5中引入的一個(gè)新特性,可以 使Java中的類和方法具有更廣泛的類型范圍 。通俗的說,它使得我們可以在定義類和方法時(shí)指定

    2024年02月05日
    瀏覽(23)
  • TS泛型,原來就這?

    TS泛型,原來就這?

    當(dāng)我們定義一個(gè)變量不確定類型的時(shí)候有兩種解決方式: 使用any 使用any定義時(shí)存在的問題:雖然知道傳入值的類型但是無法獲取函數(shù)返回值的類型;另外也失去了ts類型保護(hù)的優(yōu)勢 使用泛型 泛型指的是在定義函數(shù)/接口/類型時(shí),不預(yù)先指定具體的類型,而是在使用的時(shí)候在

    2024年02月04日
    瀏覽(15)
  • TS-泛型

    什么地方用到了泛型:函數(shù)、類型別名、接口、類 定義泛型:在這些可以使用泛型的地方后面加尖括號(hào),并寫入‘形參’; 使用泛型:在使用的函數(shù)或者類型后面加尖括號(hào)并注入類型(有的時(shí)候會(huì)被自動(dòng)類型推斷,有時(shí)不會(huì)) 類型約束使用extends

    2024年01月22日
    瀏覽(10)
  • 一文理解TS泛型

    當(dāng)我們在編寫 TypeScript 代碼時(shí),經(jīng)常會(huì)遇到需要通用(Generic)的情況,這時(shí)候,泛型就是我們的好幫手了。在本篇文章中,我們將深入介紹 TypeScript 泛型的概念以及如何使用。 在編程語言中,泛型指的是參數(shù)化類型的概念。也就是說,我們可以定義一個(gè)函數(shù)、接口或類等,

    2023年04月27日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包