成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

模式匹配-讓你TS類型體操水平暴增的套路

開發 前端
Typescript 支持泛型,也叫類型參數,可以對類型參數做一系列運算之后返回新的類型,這就是類型編程。因為類型編程實現一些邏輯還是有難度的,所以被戲稱為類型體操。

[[441994]]

Typescript 支持泛型,也叫類型參數,可以對類型參數做一系列運算之后返回新的類型,這就是類型編程。

因為類型編程實現一些邏輯還是有難度的,所以被戲稱為類型體操。

社區有用 Typescript 類型實現 Lisp 解釋器、實現象棋等案例的(知乎可以搜到),這足夠說明了 Typescript 類型可以實現各種復雜邏輯。

那 Typescript 類型體操這么難,有沒有什么快速掌握的方式呢?

確實有,我總結了一些套路,可以快速提升 ts 類型體操水平。比如今天要講的套路--模式匹配。

Typescript 類型的模式匹配

我們知道,字符串可以和正則做模式匹配,找到匹配的部分,提取子組,之后可以用 $1,$2 等引用匹配的子組。

Typescript 的類型也同樣可以做模式匹配。

比如,提取 Promise 的值的類型:

我們通過 extends 對傳入的類型參數 T 做模式匹配,其中 value 部分是需要提取的,通過 infer 類聲明一個局部變量 R 來保存,如果匹配,就返回匹配到的 R,否則就返回 never 代表沒匹配到。

這就是 Typescript 類型的模式匹配。

小結一下: Typescript 類型的模式匹配是通過 extends 對類型參數做匹配,結果保存到通過 infer 聲明的局部類型變量里,如果匹配就能從該局部變量里拿到提取出的類型。

這個模式匹配的套路有多有用呢?我們來看下在數組、字符串、函數等類型里的應用。

數組類型的模式匹配

pop

pop 是去掉最后一個元素,可以通過模式匹配來實現:

我們通過模式匹配取出最后一個元素的類型和前面的元素的類型,分別用 infer 放入不同的變量里,然后構造一個新的數組類型返回。

shift

同樣,shift 是去掉最開始的元素,也是類似的匹配方式來實現:

 

字符串類型的模式匹配

trim

trim 是去掉前后的空格、制表符、換行符,那么就通過模式匹配取出后面的字符,通過 infer 放入新的變量返回就行。

先實現 TrimLeft:

如果匹配就繼續遞歸 TrimLeft,直到前面沒有空白字符。

再實現 TrimRight:

然后兩者結合,就是 Trim:

replace

replace 是替換字符串中的一部分,可以通過模式匹配取出這段字符串前后的子串,通過 infer 放入不同的變量,然后和替換后的部分組成新字符串。

函數類型的模式匹配

參數類型

取出參數的類型是通過模式匹配拿到參數部分,放入 infer 聲明的變量里返回。

返回值類型

取出返回值類型也是通過模式匹配拿到返回值部分,放入 infer 聲明的類型變量里返回。

總結

類型編程是對類型參數(泛型)做一系列運算之后返回新的類型,也叫類型體操。

類型體操可以實現很多復雜的邏輯,學習起來也有一定的難度,但是掌握一些套路之后也能快速掌握。

這些套路里面最常用的就是模式匹配了,類似字符串匹配和提取子串,類型也可以通過 extends 對類型參數做匹配,把需要提取的部分保存到通過 infer 聲明的局部類型變量里。

類型參數的模式匹配的套路在字符串類型、數組類型、函數類型等都有大量的應用,掌握這一個套路可以提升一大截類型體操的水平。

 

責任編輯:姜華 來源: 神光的編程秘籍
相關推薦

2021-07-07 05:03:35

Debugger技巧Nodejs

2024-07-22 00:00:00

2022-02-12 22:16:53

TypeScript類型字符串

2022-01-19 23:41:56

TS索引類型

2025-03-27 03:40:00

分布式系統Kafka

2020-12-04 10:45:18

辦公軟件插件工具

2018-04-03 15:38:07

Java單例模式模式設計

2023-11-28 13:20:00

Rust匹配枚舉

2023-03-27 14:33:50

ChatGPT

2025-02-24 08:24:25

2021-03-04 09:25:08

Go語言惡意軟件黑客

2025-01-13 02:00:00

模型訓練數據

2020-05-07 17:03:49

Python編碼開發

2025-06-16 08:00:00

2025-04-10 05:00:00

JavaScriptReactWeb

2021-02-07 11:39:42

工控系統漏洞網絡攻擊

2020-06-11 09:36:49

網絡攻擊網絡戰爭黑客

2024-12-12 12:00:00

代碼C++

2022-06-07 22:16:49

iPadOS蘋果iPad

2025-05-06 03:01:00

GC參數調優
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品乱码久久久久久按摩观 | 毛片网在线观看 | 欧美日韩久| 黑人精品欧美一区二区蜜桃 | 亚洲精品国产区 | 日本视频在线播放 | 曰批视频在线观看 | 久久久久久久一区 | 久久精品亚洲精品国产欧美 | 国产aaaaav久久久一区二区 | 麻豆久久久久久久久久 | 黄色网址av | 精品中文字幕一区二区三区 | 欧美一区二区三区,视频 | 成人欧美日韩一区二区三区 | 亚洲成人午夜在线 | 久久黄色网 | 欧美日韩精品综合 | 欧美日韩国产一区二区 | 久久国产欧美日韩精品 | 亚洲精品国产a久久久久久 午夜影院网站 | 亚洲天堂男人的天堂 | 一级毛片在线看 | 一区二区免费在线观看 | 亚洲欧美综合网 | 国产精品久久久久aaaa | 东方伊人免费在线观看 | 午夜欧美 | 久久久毛片| 免费观看羞羞视频网站 | 亚洲精品乱码久久久久久蜜桃91 | 日本一区二区在线视频 | 久久久爽爽爽美女图片 | 亚洲精品视频观看 | 中文字幕成人免费视频 | 国产日韩欧美 | 国产欧美精品 | 黄视频网站在线 | 欧美激情亚洲天堂 | 日本一区二区不卡 | 欧美精品一区二区三区四区五区 |