TypeScript 常用高級類型

目錄

前言:?

TypeScript 常用高級類型

基本概念

高級類型

1. 交叉類型(Intersection Types)

2. 聯合類型(Union Types)

3. 映射類型(Mapped Types)

4. 條件類型(Conditional Types)

5. 可辨識聯合(Discriminated Unions)

6. 映射類型(Template Literal Types)

7. 預定義條件類型

應用場景

注意事項

結語

特點?


?

前言:?

"TS" 是 TypeScript 的縮寫,TypeScript 是一種由微軟開發的開源編程語言。它是 JavaScript 的一個超集,意味著 TypeScript 包含了 JavaScript 的所有特性,并且在此基礎上添加了靜態類型和其他一些額外的特性。

TypeScript 常用高級類型

TypeScript(TS)是一種強類型超集 JavaScript 語言,它在前端開發中提供了強大的類型檢查和類型抽象工具。其中,高級類型是 TypeScript 的一項強大功能,它們可以幫助我們處理復雜的數據結構、函數簽名和類型變換。在本文中,我們將深入研究前端開發中的 TypeScript 常用高級類型,包括交叉類型、聯合類型、映射類型、條件類型和更多。

基本概念

在探索 TypeScript 的高級類型之前,讓我們回顧一下幾個基本的類型概念。

  • 基本類型:?TypeScript 包括像?numberstringboolean?這樣的基本類型,它們表示簡單的數據。

  • 對象類型:?可以使用對象字面量、接口、類等定義對象類型。

  • 數組和元組:?TypeScript 具有內置的數組類型和元組類型,用于處理集合數據。

  • 函數類型:?TypeScript 支持函數類型,包括參數類型和返回值類型。

高級類型

1. 交叉類型(Intersection Types)

交叉類型用于將多個類型合并為一個類型。它通過?&?運算符實現,將多個類型的屬性和方法合并在一個新類型中。

type User = { name: string; age: number };
type Admin = { role: string; isAdmin: true };type SuperUser = User & Admin;
// SuperUser 類型包含了 User 和 Admin 類型的屬性
2. 聯合類型(Union Types)

聯合類型用于表示一個值可以屬于多個類型之一。它通過?|?運算符實現。

type Result = number | string;
// Result 變量可以存儲數字或字符串
3. 映射類型(Mapped Types)

映射類型允許您通過舊類型的屬性來創建新類型。它通常與泛型一起使用,可以用于批量更改或添加屬性。

type Options = {readonly id: number;title?: string;
};type MutableOptions = {-readonly [P in keyof Options]: Options[P];
};
// MutableOptions 移除了 id 屬性的只讀修飾符,但保留了其他屬性
4. 條件類型(Conditional Types)

條件類型是 TypeScript 中的高級類型,它允許根據條件選擇不同的類型。它常用于泛型和復雜類型邏輯。

type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
5. 可辨識聯合(Discriminated Unions)

可辨識聯合是一種用于處理不同類型的數據的高級模式。它通過一個共同的字段來標識不同的類型。

interface Circle {kind: "circle";radius: number;
}interface Square {kind: "square";sideLength: number;
}type Shape = Circle | Square;function getArea(shape: Shape) {if (shape.kind === "circle") {return Math.PI * shape.radius ** 2;} else {return shape.sideLength ** 2;}
}
6. 映射類型(Template Literal Types)

Template Literal Types 是 TypeScript 4.1 引入的,它們允許你將字符串字面量類型與模板字符串相結合,以生成新的字符串類型。

type Greeting = "Hello, " | "Hi, ";
type Name = "Alice" | "Bob";type Welcome = `${Greeting}${Name}`;
// Welcome 類型是 "Hello, Alice" | "Hello, Bob" | "Hi, Alice" | "Hi, Bob"
7. 預定義條件類型

TypeScript 4.1 引入了一些預定義的條件類型,如?ExtractExclude?和?ReturnType,它們可以用于提取類型信息、排除不需要的類型或獲取函數的返回類型。

type T = Extract<"a" | "b" | "c", "a" | "c">; // "a" | "c"
type U = Exclude<"a" | "b" | "c", "a" | "c">; // "b"
type F = ReturnType<() => string>; // string

應用場景

高級類型在前端開發中有許多應用場景,包括:

  • 復雜數據處理:?交叉類型和聯合類型可用于處理復雜的數據結構,如 API 響應和組合數據。

  • 類型安全的狀態管理:?可辨識聯合可用于構建類型安全的狀態管理,如 Redux 中的動作。

  • 動態組件:?映射類型和條件類型可用于構建動態組件或高階組件。

  • 字符串操作:?Template Literal Types 可用于字符串操作,如國際化和路由生成。

  • 預定義條件類型:?預定義條件類型使代碼更加可讀和類型安全。

注意事項

高級類型是強大的工具,但在使用它們時需要小心謹慎。過度復雜的類型可能會導致難以理解和維護的代碼。在項目中選擇適當的類型抽象和高級類型取決于您的需求和團隊的約定。

結語

TypeScript 的高級類型是前端開發中的強大工具,可以幫助我們處理復雜的數據結構、構建類型安全的應用程序和提高代碼的可維護性。通過深入研究交叉類型、聯合類型、映射類型、條件類型等,您可以更好地應用它們在實際項目中。希望這篇文章有助于您深入了解 TypeScript 的高級

特點?

TypeScript 主要的特點包括:

  1. 靜態類型:TypeScript 引入了靜態類型系統,允許開發者在編寫代碼時定義變量、函數參數和返回值的類型。這有助于在編譯時發現潛在的類型錯誤,提高了代碼的健壯性和可維護性。

  2. 類型推斷:TypeScript 能夠根據賦值操作的值推斷出變量的類型,這使得在聲明變量時不必顯式指定類型,從而簡化了代碼。

  3. 增強的工具支持:TypeScript 提供了更好的編輯器支持和工具集成。許多流行的編輯器(如 VS Code、Sublime Text 等)都支持 TypeScript,能夠提供代碼補全、錯誤檢查、重構等功能。

  4. ECMAScript 標準支持:TypeScript 嚴格遵循 ECMAScript 標準,支持最新的 JavaScript 特性和語法,開發者可以在 TypeScript 中使用 ECMAScript 6、7、8 等版本的語法。

  5. 面向對象編程的支持:TypeScript 支持面向對象編程的特性,包括類、接口、模塊等,使得代碼結構更加清晰和易于組織。

  6. 編譯時類型檢查:TypeScript 在編譯階段進行類型檢查,能夠發現潛在的類型錯誤,減少在運行時出現的錯誤。

總的來說,TypeScript 是 JavaScript 的一個超集,通過引入靜態類型和其他特性,提供了更好的代碼可維護性、可讀性和可靠性,適合大型項目或團隊合作開發。

?

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

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

相關文章

GGML 或GGUF的14種不同量化模式說明

查看 TheBloke/Llama-2–13B-chat-GGML 存儲庫中的文件&#xff0c;我們可以看到 14 種不同的 GGML 模型&#xff0c;對應于不同類型的量化。它們遵循特定的命名約定&#xff1a;“q” 用于存儲權重的位數&#xff08;精度&#xff09; 特定變體。以下是所有可能的量化方法及其…

Pytorch-Transformer軸承故障一維信號分類(三)

目錄 前言 1 數據集制作與加載 1.1 導入數據 第一步&#xff0c;導入十分類數據 第二步&#xff0c;讀取MAT文件驅動端數據 第三步&#xff0c;制作數據集 第四步&#xff0c;制作訓練集和標簽 1.2 數據加載&#xff0c;訓練數據、測試數據分組&#xff0c;數據分batch…

據房間Id是否存在,判斷當前房間是否到期且實時更改顏色

重點代碼展示&#xff1a; <template><el-col style"width: 100%;height: 100%;"><el-col :span"20"><el-card class"room_info"><avue-data-icons :option"option"></avue-data-icons></el-…

RT-DETR算法優化改進:輕量化自研設計雙卷積重新設計backbone和neck,完成漲點且計算量和參數量顯著下降

??????本文自研創新改進:雙卷積由組卷積和異構卷積組成,執行 33 和 11 卷積運算代替其他卷積核僅執行 11 卷積,YOLOv8 Conv,從而輕量化RT-DETR,性能如下表,GFLOPs 8.1降低至7.6,參數量6.3MB降低至5.8MB RT-DETR魔術師專欄介紹: https://blog.csdn.net/m0_637742…

ubuntu-c++-可執行模塊-動態鏈接庫-鏈接庫搜索-基礎知識

文章目錄 1.動態鏈接庫簡介2.動態庫搜索路徑3.運行時鏈接及搜索順序4.查看可運行模塊的鏈接庫5.總結 1.動態鏈接庫簡介 動態庫又叫動態鏈接庫&#xff0c;是程序運行的時候加載的庫&#xff0c;當動態鏈接庫正確安裝后&#xff0c;所有的程序都可以使用動態庫來運行程序。動態…

Android帝國之日志系統--logd、logcat

本文概要 這是Android系統進程系列的第四篇文章&#xff0c;本文以自述的方式來介紹logd進程&#xff0c;通過本文您將了解到logd進程存在的意義&#xff0c;以及日志系統的實現原理。&#xff08;文中的代碼是基于android13&#xff09; Android系統進程系列的前三篇文章如下…

C#基礎與進階擴展合集-基礎篇(持續更新)

目錄 本文分兩篇&#xff0c;進階篇點擊&#xff1a;C#基礎與進階擴展合集-進階篇 一、基礎入門 Ⅰ 關鍵字 Ⅱ 特性 Ⅲ 常見異常 Ⅳ 基礎擴展 1、哈希表 2、擴展方法 3、自定義集合與索引器 4、迭代器與分部類 5、yield return 6、注冊表 7、不安全代碼 8、方法…

MATLAB中cell函數的用法

cell用法 在MATLAB中&#xff0c;cell 是一種特殊的數據類型&#xff0c;用于存儲不同大小和類型的數據。cell 數組是一種容器&#xff0c;每個元素可以包含任意類型的數據&#xff0c;包括數值、字符串、矩陣、甚至其他的 cell 數組。 以下是 cell 數組的基本語法和示例&…

gitblit自建git倉庫

安裝 java sudo apt-get update sudo apt-get install openjdk-8-jdk # 或者其它你喜歡的版本 驗證&#xff1a; java -version 下載 gitblit https://github.com/gitblit-org/gitblit/releases 解壓/usr/local tar -zxvf gitblit-1.9.3.tar.gz 修改配置文件 nano /usr/local/…

【React】useCallback 使用的說明

文章目錄 useCallback的優缺點優點缺點JavaScript 的內聯優化 使用場景 用了兩年多的react&#xff0c;今天抽空寫點小內容 useCallback的優缺點 緩存了每次渲染時候 inline callback的實例 優點 關鍵點&#xff1a;利用memoize減少無效的re-render&#xff0c;通常配合shouldC…

ElasticSearch之cat trained model API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/ml/trained_models?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; id heap_size …

如何在OpenWRT軟路由系統部署uhttpd搭建web服務器實現遠程訪問——“cpolar內網穿透”

文章目錄 前言1. 檢查uhttpd安裝2. 部署web站點3. 安裝cpolar內網穿透4. 配置遠程訪問地址5. 配置固定遠程地址 前言 uhttpd 是 OpenWrt/LuCI 開發者從零開始編寫的 Web 服務器&#xff0c;目的是成為優秀穩定的、適合嵌入式設備的輕量級任務的 HTTP 服務器&#xff0c;并且和…

docker-compose的介紹與使用

一、docker-compose 常用命令和指令 1. 概要 默認的模板文件是 docker-compose.yml&#xff0c;其中定義的每個服務可以通過 image 指令指定鏡像或 build 指令&#xff08;需要 Dockerfile&#xff09;來自動構建。 注意如果使用 build 指令&#xff0c;在 Dockerfile 中設置…

RHEL網絡服務器

目錄 1.時間同步的重要性 2.配置時間服務器 &#xff08;1&#xff09;指定所使用的上層時間服務器。 (2&#xff09;指定允許訪問的客戶端 (3&#xff09;把local stratum 前的注釋符#去掉。 3.配置chrony客戶端 &#xff08;1&#xff09;修改pool那行,指定要從哪臺時間…

Python常見面試知識總結(一):迭代器、拷貝、線程及底層結構

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天來總結一下Python和C語言中常見的面試知識&#xff0c;歡迎大家一起前來探討學習~ 【一】Python中迭代器的概念&#xff1f; 可迭代對象是迭代器、生成器和裝飾器的基礎。簡單來說&#xff0c;可以使用for來循環遍歷…

[古劍山2023] pwn

最近這個打stdout的題真多。這個比賽沒打。拿到附件作了一天。 choice 32位&#xff0c;libc-2.23-i386&#xff0c;nbytes初始值為0x14,讀入0x804A04C 0x14字節后會覆蓋到nbytes 1個字節。當再次向v1讀入nbytes字節時會造成溢出。 先寫0x14p8(0xff)覆蓋到nbytes然后溢出寫傳…

初次參加軟考就想報高級,哪個相對容易考?

如果你想第一次參加軟考時就報考高級科目&#xff0c;但是卻不知道該報考高級中的哪個科目好、 ? ?那么今天的這篇文章你一定不要錯過&#xff01;首先&#xff0c;我們一起來了解一下&#xff0c;軟考高級中的5個科目。 ? ?軟考高級科目 ? 信息系統項目管理師 ? …

記錄一次postgresql臨時表丟失問題

項目相關技術棧 springboot hikari連接池pgbouncerpostgresql數據庫 背景 為了優化一個任務執行的速度&#xff0c;我將任務的sql中部分語句抽出生成臨時表&#xff08;create temp table tempqw as xxxxxxxxx&#xff09;&#xff0c;再和其他表關聯&#xff0c;提高查詢速…

三翼鳥2023輝煌收官, 定盤2024高質量棋局

最近在不同平臺上接連看到這樣的熱搜話題&#xff1a;用時間膠囊記錄2023的自己、2023年度問答、2023十大網絡流行語公布… 顯然&#xff0c; 2023年進入最后一個月&#xff0c;時間匆匆&#xff0c;這也意味著又到了總結過去和規劃未來的時候。拿到結果、取得成績當然是對202…

算法通關村第十五關 | 白銀 | 海量數據場景下的熱門算法題

1.從 40 個億中產生一個不存在的整數 可以采用位圖存儲數據&#xff0c;申請一個 bit 類型的數組 bitArr &#xff0c;每個位置只表示 0 或者 1 狀態&#xff0c;可以將占用內存縮小為使用哈希表的 1/32 。 遍歷給定的 40 億個數&#xff0c;遇到數時就將 bitArr 相應位置設置…