TypeScript 入門基礎(chǔ)

●?上一章, 我們講了 TS 的編譯和初步使用
●?現(xiàn)在我們就開始正式進(jìn)入 TS 的學(xué)習(xí)之旅

基礎(chǔ)類型
●? 我們先來對我們最基礎(chǔ)的數(shù)據(jù)類型進(jìn)行一些限制
布爾類型
●?當(dāng)前這個 boo 變量的數(shù)據(jù)類型被限制為了 布爾類型
●?一旦將來給這個變量賦值的時候, 只要不是布爾類型, 就會提示你類型錯誤

數(shù)值類型
●?ts 內(nèi)的 number 類型都是按照浮點(diǎn)數(shù)存儲的, 同時也支持十六進(jìn)制, 八進(jìn)制, 二進(jìn)制等其他進(jìn)制表示
●?給 num 變量限制為了 number 類型, 只要你給 num 賦值的是 number 類型數(shù)據(jù)就沒問題, 其他不行

字符串類
●?給 str 變量限制為了 string 數(shù)據(jù)類型

多個基礎(chǔ)類型
●?我們也可以通過 ( | ) 來給一個變量設(shè)置多個數(shù)據(jù)類型
●?這個 foo 變量就被限制為 string 或者 boolean 類型的數(shù)據(jù), 可以接受這兩種數(shù)據(jù)類型
數(shù)組類型
定義方式1
●?定義了一個 list 變量, 限制為一個數(shù)組的同時, 這個數(shù)組只能接受 number 數(shù)據(jù)

定義方式2
●?這種方式是采用的泛型的方式進(jìn)行定義, 泛型后面我們會詳細(xì)說

●?這種方式定義的數(shù)組, 也可以讓數(shù)組內(nèi)包含多種數(shù)據(jù)類型
●?表示這個數(shù)組內(nèi)可以添加 number 或者 string 類型的數(shù)據(jù)

元組類型
基礎(chǔ)定義
●?元組( Tuple ) : 是 TS 中給出的一個概念, 其實(shí)就是一個已知元素數(shù)量和數(shù)據(jù)類型的數(shù)組
元組是 TS 的一個概念, 在 JS 內(nèi)沒有元素這個概念
在 JS 中
數(shù)組是不限制長度的, 可以隨意添加多少數(shù)據(jù)
TS 的元組, 編譯以后, 其實(shí)就是 JS 中的數(shù)組
所以是不會被真正限制長度的
在 TS 中
元組也只是一個形式上的 已知元素數(shù)量 和 數(shù)據(jù)類型 的數(shù)組
不是說超過限定長度就會報錯
只是通過元組的方式, 建議你該數(shù)組的長度和類型
畢竟 TS 也只是在開發(fā)中給 JS 的各種數(shù)據(jù)添加上類型限制而已
●?將 list 限定為一個元組
○?該元組建議有兩個數(shù)據(jù)
○?[0] 位置數(shù)據(jù)是一個 number 類型數(shù)據(jù)
○?[1] 位置數(shù)據(jù)是一個 string 類型數(shù)據(jù)
○?初始化的時候, 就必須直接賦好值

●?一定要注意一個問題, 就是元組的值順序不能變

可選值
●?我們可以使用 問號( ? ) 來決定某個值為選填項
●?這個時候就是就是對 number 和 string 數(shù)據(jù)做了一個選填限制
●?該索引對應(yīng)位置可以有值可以沒有值
○?但是一定要注意, 順序不能變哦
元組越界
●?剛才我們說了, 元組其實(shí)本質(zhì)上還是數(shù)組
○?數(shù)組其實(shí)是沒有長度限制的
○?所以元組只是建議你不要超出長度, 但是其實(shí)超出去也沒事
●?所以超出限制長度的數(shù)據(jù), 就不會有過多的限制了
○?你所以寫的數(shù)據(jù)類型都可以
●?主要不在初始化的時候, 給出越界數(shù)據(jù), 后面可以向數(shù)組里面追加數(shù)據(jù)
●?而且追加出來的多余的數(shù)據(jù), 可以是 number 類型, 也可以是 string 類型
●?并且也沒有了順序的限制
●?但是其他數(shù)據(jù)類型還是不行

Any 類型
●?有些時候, 我們對于某個數(shù)據(jù), 沒有辦法確定是什么類型, 因?yàn)閿?shù)據(jù)源可能是來自用戶輸入, 或者某些第三方庫得來的, 所以我們沒辦法在一開始限制其數(shù)據(jù)類型
●?但是從 TS 的角度上來說, 每一個數(shù)據(jù)都要限制一次數(shù)據(jù)類型
●?所以, 給出了一個 Any(任意類型)
●?foo 這個變量可以接受任何數(shù)據(jù)類型, 就相當(dāng)于沒有限制
●?但是對于一個嚴(yán)謹(jǐn)?shù)某绦騿T來說, 還是不建議經(jīng)常性的使用 any, 因?yàn)檫@樣的話 TS 的意義就不在了

空類型
void
●?是一個和 any 類型剛好完全相反的類型, 它表示什么都沒有
●?我們可以給一個變量設(shè)置為 void 類型, 但是沒有人會這么做, 因?yàn)闆]有任何意義
●?當(dāng)你給 foo 設(shè)置為 void 類型以后, 這個變量就只能接受 undefined 和 null 類型數(shù)據(jù)了
●?其他的都不行
●?void 還有一個地方就是用在 函數(shù)的返回值
○?當(dāng)這個函數(shù)沒有返回值的時候, 你見到的類型限制就會是 void
●?當(dāng)然, 我們也可以倒推這個結(jié)果
●?也就是說, 當(dāng)你給一個函數(shù)的返回值設(shè)置為 void 以后
●?那么這個函數(shù)就不能寫返回值了

Never
●? 這個類型表示的是哪些永不存在的值的類型, 應(yīng)用的地方相對比較少
●?一般如果用 Never 去描述一個函數(shù)的返回值, 那么這個函數(shù)就不能有任何返回出現(xiàn), 也就是說這個函數(shù)必須不能正常結(jié)束, 所以我們就需要在該函數(shù)內(nèi)讓函數(shù)代碼報錯, 就是手動拋出異常, 或者讓函數(shù)永不結(jié)束
Undefined 和 Null
●?他們兩個和 void 很想, 本身在 TS 內(nèi)用處不是很大
●?分別對應(yīng) undefined 和 null 兩個數(shù)據(jù), 一般用不到
●?但是 undefined 和 null 可以作為任何類型的子類型出現(xiàn)
●?也就是你設(shè)置其他類型, 也可以填寫 undefined 或者 null
●?此時 n 被限制為 number 類型, 但是目前 n 的值是 undefined, 也沒有問題
●?因?yàn)?undefined 可以是 number 的子類型
object 類型
●?這是一個特殊的類型限制, 不僅僅是代表 對象數(shù)據(jù)類型
●?表示的是 非基礎(chǔ)數(shù)據(jù)類型 以外的所有類型
●?也就是除number,string,boolean,symbol,null 或 undefined 之外的類型
