TypeScript 泛型

泛型基礎

泛型允許我們在定義函數、類或接口時使用參數化類型,從而實現代碼的通用性。例如:

function identity<T>(arg: T): T {return arg;
}let output = identity<string>("hello");
console.log(output); // 輸出:hello

在上面的例子中,<T> 表示這是一個泛型函數,它接受一個類型為 T 的參數 arg,并返回相同類型的值。我們在調用 identity 函數時指定了類型參數為 string,從而確保返回值的類型與輸入值相同。

泛型類型

除了函數之外,我們還可以使用泛型來定義接口和類。例如:

interface Pair<T, U> {first: T;second: U;
}let pair: Pair<number, string> = { first: 1, second: "two" };
console.log(pair); // 輸出:{ first: 1, second: 'two' }

在上面的例子中,我們定義了一個名為 Pair 的泛型接口,它接受兩個類型參數 TU,并具有 firstsecond 兩個屬性,分別對應這兩種類型。

泛型約束

有時候,我們希望泛型具有某些特定的行為或屬性。在這種情況下,我們可以使用泛型約束來限制泛型的類型。例如:

interface Lengthwise {length: number;
}function loggingIdentity<T extends Lengthwise>(arg: T): T {console.log(arg.length);return arg;
}loggingIdentity("hello"); // 輸出:5

在上面的例子中,我們使用了泛型約束 extends Lengthwise,表示 T 必須具有 length 屬性。這樣,我們就可以在函數中安全地訪問 length 屬性,而不必擔心類型錯誤。

泛型在類中的應用

泛型不僅可以應用于函數和接口,還可以應用于類。例如:

class Box<T> {private value: T;constructor(value: T) {this.value = value;}getValue(): T {return this.value;}
}let box = new Box<number>(42);
console.log(box.getValue()); // 輸出:42

在上面的例子中,我們定義了一個名為 Box 的泛型類,它接受一個類型參數 T,并具有一個 getValue 方法,返回泛型類型 T 的值。

泛型與類型推斷

TypeScript 具有強大的類型推斷能力,可以根據上下文推斷泛型的類型,從而使代碼更加簡潔和易讀。例如:

function identity<T>(arg: T): T {return arg;
}let output = identity("hello");
console.log(output); // 輸出:hello

在上面的例子中,盡管我們沒有顯式地指定類型參數,但 TypeScript 仍然能夠推斷出 output 的類型為 string,因為參數 "hello" 的類型是已知的。

泛型的優勢與應用場景

泛型可以使我們編寫更加通用和靈活的代碼,提高代碼的重用性和可維護性。它在許多場景下都有著廣泛的應用,例如容器類、函數庫、異步編程等。通過合理地運用泛型,我們可以編寫出更加健壯和可擴展的程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18803.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么就是不顯示呢?

為了練習JavaScript中函數的使用方法&#xff0c;寫了下面的關于Date&#xff08;&#xff09;函數的使用&#xff0c;奇怪的是&#xff0c;網頁中就是不顯示相關內容&#xff0c;為什么呢&#xff1f;&#xff1f;&#xff1f; <!DOCTYPE html> <html lang"en&…

【更新】一次“問題反饋”,下定決心做了多約束多目標智能算法的“模板”

目錄 1 主要內容 2 部分代碼 3 程序結果 4 下載鏈接 1 主要內容 關注該代碼的同學應該清楚&#xff0c;這個代碼已經免費更新了兩版了&#xff0c;修復和增加了一些約束內容&#xff0c;本次增加蓄電池初始時刻和終止時刻容量一致約束&#xff0c;可別小瞧這么簡單的增加約…

工控一體機10.1寸顯示器電容觸摸屏(YA05WK)產品規格說明書

如果您對工控一體機有任何疑問或需求&#xff0c;或者對如何集成工控一體機到您的業務感興趣&#xff0c;可移步控芯捷科技。 一、硬件功能介紹 YA05WK是我公司推出的一款新型安卓屏&#xff0c;4核Cortex-A7 架構&#xff0c;主頻1.2GHz的CPU。采用12V供電&#xff0c;標配5寸…

2024.05.13 校招 實習 內推 面經

綠*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;內推/實習/校招匯總表格 1、實習 | 寧德新能源2025實習生招聘全面啟動 實習 | 寧德新能源2025實習生招聘全面啟動 2、實習 | 中國工業和信息化部電子第五研究所- 2025屆薪火計劃OFFER快捷通道正式開啟 實習 | 中…

深入理解深度學習中的激活層:Sigmoid和Softmax作為非終結層的應用

深入理解深度學習中的激活層&#xff1a;Sigmoid和Softmax作為非終結層的應用Sigmoid 和 Softmax 激活函數簡介Sigmoid函數Softmax函數 Sigmoid 和 Softmax 作為非終結層多任務學習特征變換增加網絡的非線性實際案例 注意事項結論 深入理解深度學習中的激活層&#xff1a;Sigmo…

云聯網驅動的全球智能網絡

在當今這個全球一體化加速的時代&#xff0c;企業網絡的邊界正被無限擴展&#xff0c;跨國運營、多云環境和遠程工作模式已經成為常態。中國聯通依托其強大的全球網絡資源&#xff0c;推出了以云聯網為核心技術的全球化智能組網方案&#xff0c;旨在為全球企業提供前所未有的靈…

什么是DELINS交貨指示?

DELINS 是指 Delivery Instruction&#xff08;交貨指示&#xff09;報文&#xff0c;用于在供應鏈管理中傳遞交貨指令和相關信息。該報文用于在供應鏈中的不同合作伙伴之間交換關于交貨的詳細信息。 DELINS 報文的主要功能 交貨指示&#xff1a;傳達具體的交貨指令&#xff…

如何評價GPT-4o

對比分析&#xff1a;GPT-4o與GPT-4 在人工智能領域的浪潮中&#xff0c;OpenAI的GPT系列模型一直是備受矚目的焦點。GPT-4o作為GPT系列的最新成員&#xff0c;相較于其前代GPT-4&#xff0c;無疑帶來了許多值得關注的改進和變化。 首先&#xff0c;從版本更迭的角度來看&#…

【Python】 深入理解 Python 包管理器:pip vs conda

基本原理 在Python編程世界中&#xff0c;包管理器是一個不可或缺的工具。它幫助開發者安裝、更新和管理Python庫。目前&#xff0c;最流行的兩個包管理器是pip和conda。了解它們之間的區別&#xff0c;對于Python開發者來說至關重要。 pip pip是Python的官方包管理器&#…

智慧農田視頻監控技術應用:智能監管引領農業新時代

據新聞報道&#xff0c;5月24日合肥市公安局接到群眾報警&#xff0c;反映自己辛苦種植的小麥有幾十畝地被人偷偷用收割機盜割。公安機關迅速出警并立案偵查&#xff0c;通過查看監控視頻得知&#xff0c;用戶所在的公司租用了幾千畝土地進行農業種植&#xff0c;因公司與村民之…

Day26

Day26 注解 什么是注解 java.annotation包Annotation是從JDK1.5開始引入的新技術&#xff0c;注解即可以對程序員解釋又可以對程序解釋 注解與注釋的區別 注釋&#xff1a;對程序員解釋代碼信息注解&#xff1a;對程序和程序員解釋代碼信息 注解的所用 不是程序本身&#xff0…

【C語言】9.C語言函數棧幀的創建和銷毀

C語言函數棧幀的創建和銷毀 看完本文你能了解什么? 局部變量是怎么創建的&#xff1f;為什么局部變量的值是隨機值&#xff1f;函數是怎么傳參的&#xff1f;傳參的順序是怎么樣的&#xff1f;實參和形參是什么關系&#xff1f;函數調用是怎么做的&#xff1f;函數調用結束后怎…

LeetCode hot100-57-G

17. 電話號碼的字母組合 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的映射如下&#xff08;與電話按鍵相同&#xff09;。注意 1 不對應任何字母。不會&#xff0c;放IDEA里執行了一下大概理解了流程 …

『大模型筆記』KV緩存:Transformer中的內存使用!

『大模型筆記』KV緩存:Transformer中的內存使用! 文章目錄 一. KV緩存:Transformer中的內存使用!1.1. 介紹1.2. 自注意力機制回顧1.3. KV 緩存的工作原理1.4. 內存使用和示例1.4.1. 存儲鍵值緩存需要多少內存1.4.2. Example: OPT-30B(300億參數)四. 參考文獻進一步閱讀:…

深圳比創達電子|EMC與EMI濾波器:電子設備的“電磁防護罩”

在電子科技日新月異的今天&#xff0c;電磁兼容性&#xff08;EMC&#xff09;問題越來越受到工程師和技術人員的關注。其中&#xff0c;電磁干擾&#xff08;EMI&#xff09;和電磁干擾抑制&#xff08;即EMI濾波器&#xff09;是實現良好EMC性能的關鍵技術之一。 一、EMC與E…

KineFX —— 簡介

KineFX是綁定和動畫的框架和工具集&#xff0c;可在SOP級別創建和編輯角色&#xff1b;可從頭創建自己的KineFX角色&#xff0c;或使用特定的KineFX SOP和常規的SOP去編輯導入的角色和動畫&#xff1b; 程序化綁定 KineFX構建與程序化綁定的原則上&#xff0c;可快速非破壞性迭…

AI繪畫Stable Diffusion【藝術寫真】:蒙版法圖生圖,局部重繪實現AI藝術寫真

大家好&#xff0c;我是設計師阿威 之前我分享過幾篇使用SD插件換臉方式實現AI寫真的教程&#xff0c;主要存在2個大的問題。 &#xff08;1&#xff09;人臉相似度 &#xff08;2&#xff09;生成的圖片整體色調有時候會比較怪異 對于上面的問題&#xff0c;在對圖片質量要…

一些圖形界面的工具可以幫助你模擬點擊和進行其他瀏覽器自動化操作

1. Selenium IDE Selenium IDE 是一個用于記錄、編輯和調試測試的集成開發環境。它有一個圖形界面,允許你通過點擊和錄制來創建測試用例。它支持Chrome和Firefox瀏覽器。 安裝和使用步驟: 在Chrome或Firefox的擴展商店中搜索“Selenium IDE”并安裝。打開Selenium IDE擴展。…

每天寫兩道(二)LRU緩存、數組中最大的第k個元素

146.LRU 緩存 . - 力扣&#xff08;LeetCode&#xff09; 請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 實現 LRUCache 類&#xff1a; LRUCache(int capacity) 以 正整數 作為容量 capacity 初始化 LRU 緩存int get(int key) 如果關鍵字 key 存在于緩存…

類中使用QtConcurrent::run

在QtConcurrent::run中調用類的成員函數時&#xff0c;你需要注意幾個關鍵點&#xff1a; 對象生命周期&#xff1a;你需要確保在QtConcurrent::run調用的整個期間&#xff0c;類對象都是有效的。如果對象在成員函數執行期間被銷毀&#xff0c;將會導致未定義行為。成員函數訪…