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...