自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用更具可讀性的方式來(lái)設(shè)置 TypeScript 類型

開發(fā) 前端
TypeScript 提供了一些內(nèi)置的實(shí)用類型,可以更好的方式將類型從一種形式轉(zhuǎn)換到另一種形式。

[[405512]]

TypeScript 提供了一些內(nèi)置的實(shí)用類型,可以更好的方式將類型從一種形式轉(zhuǎn)換到另一種形式。

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

TypeScript 泛型

在了解 TypeScript 實(shí)用、類型之前,類型別名和泛型很重要。我們以在TypeScript中為任何現(xiàn)有類型創(chuàng)建類型別名。

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

泛型用于創(chuàng)建可重用的類型別名。假設(shè)我們有一個(gè)identity 函數(shù),該函數(shù)返回傳遞的任何值:

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

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

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

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

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

接著,在調(diào)用它時(shí)指定函數(shù)的類型:

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

TypeScript 中的內(nèi)置實(shí)用類型

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

Partial

Pritial<T>把 T 的所有屬性變?yōu)榭蛇x。

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

Required

Required<T>把 T 的所有屬性變?yōu)楸靥畹摹?t>

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

Readonly

Readonly<T>把 T 的所有屬性變?yōu)橹蛔x的。

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

Pick

Pick<T,K> 抽取T里的屬性,屬性來(lái)自K.

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

Parameters

Parameters<T> T 是 Function,提取函數(shù)里返回值為 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>生成一個(gè)接口,屬性為K的所有屬性,k的所有屬性都有T的類型

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

如果所有類型都具有相同的值,則聲明的 Record 版本會(huì)更加簡(jiǎn)潔和可讀,因?yàn)樗鼈兌季哂邢嗤念愋汀?/p>

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>- 獲取函數(shù)類型的返回類型

  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>- 獲取構(gòu)造函數(shù)的實(shí)例類型

  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 

~完,我是小智。

更多實(shí)用類別,請(qǐng)自行看官網(wǎng)。https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype

作者:SARANSH KATARIA 譯者:前端小智 來(lái)源:wisdomgeek

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

本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。

 

責(zé)任編輯:姜華 來(lái)源: 大遷世界
相關(guān)推薦

2021-01-26 09:18:27

Shell腳本網(wǎng)站

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數(shù)據(jù)分析pipe()

2017-10-30 15:22:29

代碼可讀性技巧

2021-04-01 16:43:05

代碼可讀性開發(fā)

2015-08-27 13:11:18

JavaScript代碼

2024-04-23 08:01:20

面向?qū)ο?/a>C 語(yǔ)言代碼

2022-08-29 00:37:53

Python技巧代碼

2017-12-19 16:24:20

2022-08-23 14:57:43

Python技巧函數(shù)

2019-12-03 09:32:32

JavaScript代碼開發(fā)

2022-11-04 11:18:16

代碼優(yōu)化可讀性

2024-01-31 08:04:43

Pygments庫(kù)Python

2024-10-11 06:00:00

Python代碼編程

2014-07-28 10:28:25

程序員

2014-07-29 09:55:33

程序員代碼可讀性

2024-10-07 10:00:00

Python代碼編碼

2023-01-30 08:16:39

Go語(yǔ)言Map
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)