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

使用更具可讀性的方式來設置 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()

2021-04-01 16:43:05

代碼可讀性開發

2017-10-30 15:22:29

代碼可讀性技巧

2015-08-27 13:11:18

JavaScript代碼

2022-08-23 14:57:43

Python技巧函數

2017-12-19 16:24:20

2022-08-29 00:37:53

Python技巧代碼

2024-04-23 08:01:20

面向對象C 語言代碼

2014-07-28 10:28:25

程序員

2014-07-29 09:55:33

程序員代碼可讀性

2024-10-11 06:00:00

Python代碼編程

2024-10-07 10:00:00

Python代碼編碼

2019-12-03 09:32:32

JavaScript代碼開發

2022-11-04 11:18:16

代碼優化可讀性

2024-01-31 08:04:43

PygmentsPython

2023-01-30 08:16:39

Go語言Map
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草青青草 | 色在线看 | 国产yw851.c免费观看网站 | 91亚洲国产成人久久精品网站 | 国产欧美一区二区三区久久手机版 | 国产美女一区二区 | 野狼在线社区2017入口 | 在线成人一区 | 日韩中文字幕视频在线观看 | 中文字幕一区二区三区不卡在线 | 精品一区二区三区日本 | 自拍偷拍亚洲欧美 | 欧美精品久久 | 免费污视频 | 中国一级特黄视频 | 国产精品久久久久久久岛一牛影视 | 天天操天天射综合网 | 美国a级毛片免费视频 | 国产成人av电影 | 日韩在线不卡视频 | 羞羞网站在线免费观看 | 久久久久久国 | 日韩a在线| 午夜久草 | 成年人在线播放 | 欧美男人天堂 | 国产成人自拍av | av影片在线 | 国产精品亚洲一区二区三区在线观看 | 羞羞色影院 | 免费 视频 1级 | 天天操天天射天天 | 国产欧美在线播放 | 久久国产精品一区二区三区 | 久久亚洲一区二区三区四区 | 久久视频精品 | 成人国产精品久久 | 欧美日韩在线播放 | 一级欧美一级日韩片免费观看 | 777zyz色资源站在线观看 | 午夜精品久久久久久久久久久久久 |