国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用更具可讀性的方式來設置 TypeScript 類型

開發 前端
TypeScript 提供了一些內置的實用類型,可以更好的方式將類型從一種形式轉換到另一種形式。

[[405512]]

TypeScript 提供了一些內置的實用類型,可以更好的方式將類型從一種形式轉換到另一種形式。

這些內置的類型全局可用的,所以可以很方便的使用它們。

TypeScript 泛型

在了解 TypeScript 實用、類型之前,類型別名和泛型很重要。我們以在TypeScript中為任何現有類型創建類型別名。

  1. type MyString = string; 
  2.  
  3. let helloWorldMessage: MyString = 'Hello Wisdom Geek'

泛型用于創建可重用的類型別名。假設我們有一個identity 函數,該函數返回傳遞的任何值:

  1. const identity = (arg: string): string => arg; 

如果我們要返回的是 number 類型怎么辦?有小伙伴可能會用any代替特定的類型

  1. const identity = (arg: any): any => arg; 

但這減少了參數的類型信息,因此,也失去 TypeScript 帶來的好處。我們想要以一種可以用來表示返回類型的方式來捕獲參數的類型。這就是泛型派上用場的地方。我們將使用適用于類型而不是值的類型變量。

  1. const identity<T> = (arg: T): T => arg; 

接著,在調用它時指定函數的類型:

  1. const output = identity<string>("Hello Wisdom Geek"); 

TypeScript 中的內置實用類型

在開始講解內置實用類型之前,這些工具類型在4.0版本之前是可用的,不需要任何額外的包。

Partial

Pritial<T>把 T 的所有屬性變為可選。

  1. type BlogPost = { 
  2.   title: string; 
  3.   author: string; 
  4.  
  5. type PartialBlogPost = Partial<BlogPost>; 
  6. /* 等價于 { 
  7.   title?: string; 
  8.   author?: string; 
  9. } */ 

Required

Required<T>把 T 的所有屬性變為必填的。

  1. type PartialBlogPost = { 
  2.   title?: string; 
  3.   author?: string; 
  4.  
  5. type BlogPost = Required<PartialBlogPost>; 
  6. /* 等價于 { 
  7.   title: string; 
  8.   author: string; 
  9. } */ 

Readonly

Readonly<T>把 T 的所有屬性變為只讀的。

  1. type BlogPost = { 
  2.   title: string; 
  3.   author: string; 
  4.  
  5. type BlogPost = Readonly<PartialBlogPost>; 
  6. /* 等價于 { 
  7.   readonly title: string; 
  8.   readonly author: string; 
  9. } */ 

Pick

Pick<T,K> 抽取T里的屬性,屬性來自K.

  1. type Point3D = { 
  2.   x: number, 
  3.   y: number, 
  4.   z: number, 
  5. }; 
  6.  
  7.  
  8. type Point2D = Pick<Point3D, 'x'|'y'>; 
  9. /* 等價于 { 
  10.   x: number, 
  11.   y: number 
  12. } */ 

Parameters

Parameters<T> T 是 Function,提取函數里返回值為 tuple。

  1. type T0 = Parameters<() => string>; 
  2. // type T0 = [] 
  3.  
  4. type T1 = Parameters<(s: string) => void>;  
  5. // type T1 = [s: string] 
  6.  
  7. type T2 = Parameters<<T>(arg: T) => T>; 
  8. // type T2 = [arg: unknown] 

Omit

Omit<T,K>和Pick相反(去除屬性).

  1. type Point3D = { 
  2.   x: number, 
  3.   y: number, 
  4.   z: number, 
  5. }; 
  6.  
  7.  
  8. type Point2D = Omit<Point3D, 'z'>; 
  9. /* same as { 
  10.   x: number, 
  11.   y: number 
  12. } */ 

Record

Record<K,T>生成一個接口,屬性為K的所有屬性,k的所有屬性都有T的類型

  1. type BlogPost = Record<'title' | 'author', strnig> 
  2.  
  3. /* same as { 
  4.   title: string; 
  5.   author: string; 
  6. } */ 

如果所有類型都具有相同的值,則聲明的 Record 版本會更加簡潔和可讀,因為它們都具有相同的類型。

Extract

Extract<T, U> - 用于從類型T中取出可分配給U類型的成員

  1. type T0 = Extract<"a" | "b" | "c""a" | "f">; 
  2.      // type T0 = "a" 
  3. type T1 = Extract<string | number | (() => void), Function>;   
  4.      // type T1 = () => void 

Exclude

Exclude<T, U> - 用于從類型T中去除不在U類型中的成員。

  1. type T0 = Exclude<"a" | "b" | "c""a">; 
  2.      // type T0 = "b" | "c" 
  3.  
  4. type T1 = Exclude<string | number | (() => void), Function>; 
  5.      // type T2 = string | number 

NonNullable

NonNullable<T>- 用于從類型T中去除undefined和null類型。

  1. type T0 = NonNullable<string | number | undefined>; 
  2.      // type T0 = string | number 
  3.  
  4. type T1 = NonNullable<string[] | null | undefined>; 
  5.      // type T1 = string[] 

ReturnType

ReturnType<T>- 獲取函數類型的返回類型

  1. type T0 = ReturnType<() => string>; 
  2.       
  3. type T0 = string 
  4. type T1 = ReturnType<(s: string) => void>; 
  5.       
  6. type T1 = void 
  7. type T2 = ReturnType<<T>() => T>; 
  8.       
  9. type T2 = unknown 
  10. type T3 = ReturnType<<T extends U, U extends number[]>() => T>; 
  11.       
  12. type T3 = number[] 
  13.  
  14. type T5 = ReturnType<any>; 
  15.       
  16. type T5 = any 
  17. type T6 = ReturnType<never>; 
  18.       
  19. type T6 = never 
  20. type T7 = ReturnType<string>; 

InstanceType

InstanceType<T>- 獲取構造函數的實例類型

  1. class C { 
  2.   x = 0; 
  3.   y = 0; 
  4.  
  5. type T0 = InstanceType<typeof C>; 
  6.       
  7. type T0 = C 
  8. type T1 = InstanceType<any>; 
  9.       
  10. type T1 = any 
  11. type T2 = InstanceType<never>; 
  12.       
  13. type T2 = never 

~完,我是小智。

更多實用類別,請自行看官網。https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype

作者:SARANSH KATARIA 譯者:前端小智 來源:wisdomgeek

原文:https://www.wisdomgeek.com/development/web-development/typescript/using-utility-types-for-transforming-typescript-types/

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

 

責任編輯:姜華 來源: 大遷世界
相關推薦

2021-01-26 09:18:27

Shell腳本網站

2023-10-30 18:05:55

Python類型

2024-08-02 16:20:06

2021-10-09 10:24:53

Java 代碼可讀性

2020-11-08 14:36:27

pandas數據分析pipe()

2017-10-30 15:22:29

代碼可讀性技巧

2021-04-01 16:43:05

代碼可讀性開發

2015-08-27 13:11:18

JavaScript代碼

2024-04-23 08:01:20

面向對象C 語言代碼

2025-11-07 04:22:00

2022-08-29 00:37:53

Python技巧代碼

2022-08-23 14:57:43

Python技巧函數

2017-12-19 16:24:20

2024-01-31 08:04:43

PygmentsPython

2019-12-03 09:32:32

JavaScript代碼開發

2022-11-04 11:18:16

代碼優化可讀性

2014-07-29 09:55:33

程序員代碼可讀性

2024-10-11 06:00:00

Python代碼編程

2014-07-28 10:28:25

程序員

2024-10-07 10:00:00

Python代碼編碼
點贊
收藏

51CTO技術棧公眾號

国产精品一区二区三区毛片淫片| 国产精品涩涩涩视频网站| 国产精品99久久免费| 91久久精品一区二区二区| av免费在线播放网站| 国产在线乱码一区二区三区| 成人资源视频网站免费| 精品成人自拍视频| 亚洲男人天天操| а√天堂官网中文在线| 亚洲一卡二卡三卡四卡五卡| 国产日韩成人内射视频| 国产麻豆成人传媒免费观看| 日本成人三级| 久久精品午夜| 蜜桃精品久久久久久久免费影院 | 亚洲电影免费| 老司机精品导航| 欧美乱偷一区二区三区在线| 亚洲伦理精品| 日韩电影天堂视频一区二区| 日韩成人精品在线观看| 亚洲精品高清国产一线久久| 麻豆国产精品777777在线| 亚洲蜜桃av| 国产精品白丝av| 黄色片久久久久| 国产精品国产三级国产aⅴ中文 | 国产在线观看免费网站| 欧美性猛交xxxx乱大交蜜桃| 超碰在线公开超碰在线| 日韩一区欧美小说| 五月婷婷开心综合| 亚洲精品v日韩精品| 天天爽人人爽夜夜爽| 亚洲麻豆国产自偷在线| 国产黄色免费电影| 红桃av永久久久| 玖玖综合伊人| 在线不卡a资源高清| 丝袜美女在线观看| 最近2019年中文视频免费在线观看| 久久亚洲国产精品尤物| 国内免费久久久久久久久久久 | 色视频在线观看| 国产欧美日韩在线观看| www.国产在线视频| 成人av中文字幕| 熟女视频一区二区三区| 久久97超碰国产精品超碰| 人禽交欧美网站免费| 日韩极品在线观看| 在线免费观看成人| 国产剧情一区二区三区| 你真棒插曲来救救我在线观看| 国产高清在线精品| 中文字幕日本最新乱码视频| 国产精品国产精品国产专区不片| fc2人成共享视频在线观看| 91成人国产精品| 视频一区在线免费看| 国产97色在线| 久久中文精品| 播放灌醉水嫩大学生国内精品| 国产欧美日韩精品在线| 激情小视频在线| 精品对白一区国产伦| 影视一区二区三区| 久久久久久久一区二区三区| 国产免费久久| 91精品免费| 日韩**一区毛片| 青青草视频在线免费播放| 国产无一区二区| 人人超碰在线| 欧美成人vps| 精品国产欧美| 国产精品日日摸夜夜添夜夜av| 综合在线视频| 亚洲一区二区精品在线观看| 99久久精品免费| 免费在线看污| 精品国产一区二区精华| 电影91久久久| 91人成网站www| 久久一留热品黄| 黄色免费在线看| 奇米一区二区三区四区久久| 久久99精品国产麻豆不卡| 最近2018年手机中文在线| 一个色综合网| 日本一本草久p| 色老汉av一区二区三区| 亚洲视频一起| 亚洲最大色综合成人av| 国产精品久久三区| 国产一二区在线| 国内精品400部情侣激情| 亚洲综合精品四区| 国内外免费激情视频| 7777精品伊人久久久大香线蕉完整版 | 久久悠悠精品综合网| 97在线视频精品| 欧美日韩1区| 高清av免费看| 久久视频一区二区| 亚洲人成影视在线观看| 国产精品你懂的在线欣赏| 黄网页在线观看| 国内精品中文字幕| 日本va欧美va瓶| 另类图片激情| 亚洲人午夜精品免费| 999久久久亚洲| 国产99久久九九精品无码| 五月天亚洲精品| 99久久久国产| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲视频你懂的| 成人在线不卡| 久草精品电影| 欧美专区日韩专区| 亚洲国产合集| 九九九九免费视频| 精品久久久久av影院| 国产黄视频在线| 欧美日韩国产另类一区| 99久久视频| 春暖花开亚洲| 久久99国产精品自在自在app| 美女在线观看视频一区二区| 青青久在线视频免费观看| 456亚洲影院| 久久久精品2019中文字幕之3| 国产蜜臀av在线播放| 国产精品一区二区三区在线 | 最新国产精品精品视频| 色哟哟免费网站| 超碰国产精品一区二页| 精品日韩视频在线观看| 青青草国产免费一区二区下载| 日韩免费av一区二区三区| 日韩美女天天操| 久久99国产精一区二区三区| 国内一区二区三区在线视频| 国产精品情趣视频| 久久一区91| 中文字幕不卡免费视频| 国产福利片一区二区| 69影院欧美专区视频| 视频一区视频二区中文| 深夜福利在线观看直播| 久久99国产精品自在自在app | 国语一区二区三区| 国产精品精华液网站| 岛国毛片在线播放| 成人免费视频观看视频| 日韩欧美www| 国产精品不卡一区二区三区| 婷婷综合国产| 欧美污视频网站| 日韩一本精品| 亚洲一区二区三区成人在线视频精品| 在线观看亚洲专区| 国产性色一区二区| 在线观看网站黄不卡| 日韩欧美不卡一区| 精品露脸国产偷人在视频| 夜夜嗨av一区二区三区网站四季av| 人人精品视频| 日韩欧美久久| 日韩在线观看一区二区三区| 久久午夜影院| 国产精品成人**免费视频| 免费观看不卡av| 欧美 日韩 国产精品免费观看| 欧美午夜国产| 国产91丝袜在线播放0| 欧美日韩在线免费观看| 国产午夜亚洲精品理论片色戒| 亚洲欧美tv| av不卡一区| 欧美人与禽猛交乱配视频| 亚洲国产一区二区精品专区| 国产盗摄女厕一区二区三区| 中文字幕综合网| 91一区在线观看| 在线成人动漫av| 精品一区二区三区亚洲| 亚洲综合网狠久久| 日本精品三区| 国产一区二区91| 亚洲三级久久久| ●精品国产综合乱码久久久久 | 国产精品一区二区三区久久久| 中文字幕不卡每日更新1区2区| 毛片在线免费| av影片在线一区| 国产欧美精品一区aⅴ影院| 日韩精品一区二|