typescript 內建型別

2021-10-12 01:47:47 字數 3501 閱讀 7409

ts關鍵字

ts 內建型別

- partial 將內建屬性邊可選

- required 將型別屬性邊必選

- pick 從某個型別中挑出一些屬性

- record

- mutable 將型別的屬性邊城可修改

- readonly 型別的屬性變唯讀

- returntype 用來得到乙個函式的返回值型別

! 的作用是斷言某個變數不會是 null/undefined,告訴編輯器停止報錯。

?. 支援如下語法

obj?

.prop // 物件屬性

obj?

.[expr]

// 物件屬性

arr?

.[index]

// 獲取資料中 index 下標對應的值

func?.(

...args)

// 函式或物件方法的呼叫

`type `型別別名用來給型別起乙個新名字
type setuser

=(name: string,age: number)

=> viod

型別別名常用語聯合型別 (聯合型別表示取值可以為多種型別中的一種)

inte***ce 用來定義型別

type inte***ce 的區別

都支援拓展,單語法不同

inte***ce

name

inte***ce

user

extends

name

----

----

----

type name

type user = name &

typeof 可以獲取乙個變數宣告型別 、

const obj =

type foo =

typeof obj

// type foo =

keyof 可以獲取乙個物件介面所有的key值

type obj =

type foo = keyof obj;

// type foo = 'b' | 'a'

in 可以遍歷列舉型別

type keys =

'a'|

'b'|

'c';

type obj =

/** in 遍歷keys ,並未每個值賦予string 型別

type obj =

**/

parial 將型別的屬性變為可選
功能是將型別的屬性變成可選,  (中文翻譯為 區域性的 部分的)
實現原理

type partial<

t>

=eg:

inte***ce

userinfo

error:property 'id' is missing in type '' but required in type 'userinfo'

const xiaoming: userinfo =

使用 partial<

t>

type newuserinfo = partial

const xiaoming : newuserinfo =

newuserinfo 相當於

inte***ce

newuserinfo

但是 partial<

t> 有個侷限性,就是只支援處理第一層的屬性

inte***ce

userinfo

}type newuserinfo = partial

;const xiaoming: newuserinfo =

}可以看到,第二層以後就不會處理了,如果要處理多層,就可以自己通過 conditional types[2]

deeppartial

type deeppartial<

t>=;

type partialedwindow = deeppartial

;// 現在window 上所有屬性都變成了可選啦

實現邏輯

type required<

t>

=// -? 代表移除 ? 這個標識

還可以運用在 readonly 比如readonly<

t>

type reacdonly<

t>

=

type pickkextends

keyof

t>

=inte***ce

userinfo

type newuserinfo = pick'name'

>

// type newuserinfo =

實現原理:

type record<

kextends

keyof any,

t>

=eg:

type currecord = record<

'a'|

'b'|

'c', userinfo>

(有點類似遍歷設定每個屬性的型別)

type currecord =

實現原理 

跟上面的實現必選 類似 , 就是去除唯讀屬性

type mutable<

t>

=;

實現原理

type readonly<

t>

=;

type returntype<

textends

(...args: any)

=> any>=t

extends

(...args: any)

=> infer r?r

: any

infer在這裡用於提取函式型別的返回值型別。returntype<

t> 只是將 infer r 從引數位置移動到返回值位置,因此此時 r 即是表示待推斷的返回值型別。

// infer 標識extends 語句中待推斷的型別變數

這個有點繞 可以看著 https:

133249506

?from_voters_page=

true

eg:// 示例用returntype獲取到 func 的返回值型別為 string,所以,foo 也就只能被賦值為字串了。

type func

=(value: number)

=> string;

const foo: returntype

="1"

;

TypeScript 基礎型別

基礎型別可以依據是否含有型別關鍵字分為兩類 注意 所有型別關鍵字都是小寫的。注 這種分類並不嚴謹,分類的目的僅僅用於幫助記憶型別用來指定變數的型別,相容的型別之間才能進行賦值 傳參等操作。宣告變數型別使用變數名 型別格式,如let decimal number 10,宣告之後decimal就只能接受...

typescript 索引型別

1.索引型別 let obj function getkey obj any keys string 指定所包含的屬性 console.log getkey obj,a b 放入不包含的屬性,正常情況我們希望這種要報錯 console.log getkey obj,c f 1.2 接下來學習幾種方法...

typeScript資料型別

布林型別 boolean 數字型別 number 字串型別 string 元組型別 tuple 列舉型別 enum 任意型別 any null和undefined void型別 never型別 注意 寫ts 定義變數要指定型別 var flag boolean true flag 123 報錯 fl...