1誊薄、類型注解
作用:為變量添加類型約束
解釋:只能賦值該類型
2、常用基礎類型
2.1锰茉、js已有類型:
(1)原始類型:number呢蔫、string、boolean飒筑、null片吊、undefined、symbol
特點:簡單协屡,按js中類型名
(2)對象類型:Object
特點:細化俏脊,都有自己的類型語法
2.2、新增類型:
聯(lián)合類型肤晓、自定義類型(類型別名)爷贫、接口、元祖补憾、字面量類型漫萄、枚舉、void盈匾、any等
3腾务、對象類型細化:
3.1、數(shù)組類型:
number[](推薦)削饵、Array<string>
聯(lián)合類型:|
(number|string|boolean)[]
3.2岩瘦、類型別名
自定義類型,為任意類型起別名
使用場景:同一復雜類型被多次使用葵孤,通過類型別名簡化類型
解釋:
(1)使用type關鍵字創(chuàng)建
(2)可是任意合法的變量名稱
(3)直接使用該類型別名進行注解
3.3担钮、函數(shù)類型
函數(shù)參數(shù)和返回值的類型。
(1)單獨指定參數(shù)尤仍、返回值的類型箫津;
(2)同時指定參數(shù)宰啦、返回值的類型
????????ps:只適用于函數(shù)表達式
(3)函數(shù)返回值類型:void(函數(shù)沒有返回值)
(4)可選參數(shù):?(可選參數(shù)后面不能出現(xiàn)必選參數(shù))
3.4、對象類型
描述對象的結構
ps:;(分號)分隔(分號相當于換行鴨~)赡模,如果一行代碼只指定一個屬性類型(換行指定另一個)田炭,可以去掉分號
對象的屬性可有可無,使用可選屬性?{a:number;b?:string}
3.5漓柑、接口
對象類型多次使用教硫,使用接口(interface)描述對象叨吮,進行復用
(1)interface關鍵字聲明接口
(2)接口名稱,任意合法變量名
(3)直接使用接口名稱作為變量類型
對比:interface(接口)與type(類型別名)
相同:都可以給對象指定類型
不同:interface只能為對象指定類型瞬矩,type可以為任意類型指定別名(聲明用=)
繼承:如果兩個接口有相同的屬性方法時使用集成來實現(xiàn)復用
3.6茶鉴、元組
如坐標數(shù)組,使用numbe[]不嚴謹景用,使用元組[number,number]
確切知道包含了多少元素涵叮,以及元素類型
3.7、類型推論
ts中在某些沒有明確指出類型的地方伞插,ts的類型推論機制會幫助提供類型(類型注解可以省略不寫)
常見場景:1.聲明變量并初始化時割粮,2.決定函數(shù)返回值時
如果聲明變量沒有立即初始化,則必須添加類型注解
3.8媚污、類型斷言
指定更具體的類型
~as關鍵字 ~關鍵字as后面是一個更加具體的類型
使用<>語法舀瓢,這種語法形式不常用:(與react語法沖突)
(console.dir)
3.9、字面量類型
變量(let)可以是任意字符串杠步,所以類型為string
常量(cosnt)值不能變化氢伟,所以類型為KKKK
KKKK就是一個字面量類型
任意的js字面量(例如對象、數(shù)字)都可以作為字面量類型( let a:18 = 18 )
使用場景:表示一組明確的可選值列表幽歼。如:
3.10朵锣、枚舉
類似字面量類型+聯(lián)合類型組合的功能,也可表示一組明確的可選值
定義一組命名常量
~使用enum關鍵字定義枚舉甸私。~約定枚舉名稱诚些、枚舉中的值用大寫字母開頭。~,逗號分隔皇型。~直接使用诬烹。
~枚舉成員是有值的,默認:從0開始自增的數(shù)值
枚舉成員為數(shù)字的枚舉稱為:數(shù)字枚舉(存在自增長行為)
給枚舉成員初始化值
枚舉成員都是字符串的稱為:字符串枚舉
字符串枚舉中每個成員都必須要有初始值(不存在自增長行為)
枚舉不僅作為類型弃鸦,還提供值(枚舉成員都是有值的)绞吁。其他類型會在編譯成js是自動移除,但是枚舉會被編譯成js代碼
一般情況下推薦使用字面量類型+聯(lián)合類型組合的方式唬格,相比于枚舉更加直觀家破、簡潔、高效购岗。
3.11汰聋、any類型
不推薦使用,當值為any類型時喊积,可以對改值進行任意操作烹困,并且不會有代碼提示
其他隱式具有any類型情況:1 聲明變量不提供類型也不提供默認值? 2 函數(shù)參數(shù)不加類型
4、typeof
可以在類型上下文中引用變量或屬性的類型(類型查詢)乾吻。
使用場景:根據已有變量的值髓梅,獲取該值的類型拟蜻,來簡化類型書寫
typeof出現(xiàn)在類型注解的位置,所處環(huán)境就在類型上下文
只能查詢變量或屬性的類型女淑,無法查詢其他形式的類型(如:函數(shù)調用)