TypeScript已有泛型,介面,型別功能

2021-10-25 14:03:50 字數 1089 閱讀 7980

1:omit​ 型別讓我們可以從另乙個物件型別中剔除某些屬性,並建立乙個新的物件型別:

泛型型別宣告:type omit= pick>;

type user =

;type userwithoutemail = omit"email"

>

;// 等價於:

type userwithoutemail =

;

2:pick​ 幫助型別是乙個對映型別,它用了 ​keyof​ 操作符和乙個索引型別 ​t[p]​ 來獲取型別物件型別 ​t​ 中的屬性 ​p​ 。

type pickkextends

keyof

t>=;

type user =

;type student =

"name"

|"id"

;const other: pick

=

// 原始型別

inte***ce

tstate

// 如果我只想要name和age怎麼辦,最粗暴的就是直接再定義乙個(我之前就是這麼搞得)

inte***ce

tsinglestate

// 這樣的弊端是什麼?就是在tstate發生改變的時候,tsinglestate並不會跟著一起改變,所以應該這麼寫

inte***ce

tsinglestate

extends

pick

"name"

|"age"

>

;const person: tsinglestate =

const a: pick=

3:readonlyarray 用來約束乙個物件的屬性, 在物件剛建立時能賦值, 往後賦值均會報錯, 在類中使用 readonly 只能在建構函式中賦初始值。

inte***ce

readonlyarray

<

t>

TypeScript泛型約束

有了泛型之後,乙個函式或容器類能處理的型別一下子擴到了無限大,似乎有點失控的感覺。所以這裡又產生了乙個約束的概念。我們可以宣告對型別引數進行約束。我們還拿上文中的student栗子來說,想訪問value的length屬性,但是編譯器並不能證明每種型別都有length屬性,所以就報錯了。student...

TypeScript泛型介面

以使用介面的方式來定義乙個函式需要符合的形狀 inte ce searchfunc let mysearch searchfunc source string,substring string 當然也可以使用含有泛型的介面來定義函式的形狀 inte ce createarrayfunc let cr...

TypeScript泛型學習

最近在跟著黃軼老師學習vue3.0框架的原始碼,遇到了難啃的點就是typescript的泛型反向推論。所以停下腳步找找資料加強學習typescript的泛型模組。首先簡單建立第乙個使用泛型的例子 test函式,這個函式會返回任何傳入它的值。不用泛型的情況function test arg numbe...