
這張圖來自 TypeScript 官網(wǎng)
提到了說 TypeScript 是 JavaScript 的超集!
它有自己的靜態(tài)類型
并且他不能直接被瀏覽器運行,需要編譯為 JavaScript 之后才能運行。
所以選擇學(xué)習(xí) TypeScript 的話呢 要有 JavaScript 的基礎(chǔ)就可以更快速的入門了!
TS與JS相比較的一些小優(yōu)勢:
1.TS在開發(fā)過程中,可以更早的在編輯器中就發(fā)現(xiàn)潛在的問題,而JS得在瀏覽器中運行之后才會暴露錯誤;
2.TS擁有更友好的編輯器自動提示;
3.TS代碼語義更清晰易懂
TS中的靜態(tài)類型分為兩種,一種基礎(chǔ)類型,一種是對象類型
類似于JS中的基礎(chǔ)類型和引用類型
先來看幾個基礎(chǔ)類型:
const myName: string = 'Dell'
const myAge: number = 18
const r: boolean = true
const n: null = null
const s: symbol = Symbol('s')
const u: undefined = undefined
再來看看對象類型:
const teacher: {
name: string
age: number
} = {
name: 'Dell',
age: 18
}
const ages: () => number = () => {
return 18
}
const arr: number[] = [1, 2, 2]
可以這樣理解上邊的代碼 ------ const 變量名稱:變量類型 = 值
如果你自己去手動寫呢,你會發(fā)現(xiàn)它的代碼提示非常的強大,可以幫助你更快的進行開發(fā)!
接下來看看 type annotation 類型注解 與 type inference 類型推斷
感覺如果TS聲明變量需要像上方兩段代碼那樣來寫,那就太麻煩了,
其實呢 商法的寫法都是類型注解,就是我們主動告訴TS聲明的變量是什么類型,
但是實際我們不需要這么麻煩,因為TS可以自己去做類型推斷
const myName: string = 'Dell'
const myAge: number = 18
// 上方兩個變量完全不需要 類型注解 因為他們的值會被TS識別 ,繼而推斷出來他們是什么類型的變量
上方的代碼完全可以像在JS中的寫法一樣去聲明變量,這就是類型注解和類型推斷,
下方的情況,就需要用到類型注解了
function getTotal(one, two) {
return one + two
}
const total = getTotal(1, 2)
上方的這段代碼 total 是什么類型呢?
它不確定是什么類型,因為傳參可能是任何類型的數(shù)據(jù)
在TS無法推斷類型的時候,我們可以為它進行類型注解
function getTotal(one: number, two: number) {
return one + two
}
const total = getTotal(1, 2)
這樣我們聲明了入?yún)?number 下方的 total 也就不需要類型注解了 ,TS可以推斷出來 total 也一定為 number 類型!
這就是 類型注解 與 類型推斷 。
但是呢,在我們實際項目中,我們很多時候還是會對函數(shù)進行 類型注解,
function getTotal(one: number, two: number){
return one + two + ''
}
const total = getTotal(1, 2)
假如我期望此函數(shù)返回的是 number 類型,但是由于我疏忽大意 寫成了 return one + two + '' ,但是卻不會報錯
因為此時 TS類型推斷 total 是一個 string 類型, 所以代碼并不會報錯,所以我們需要對函數(shù)返回值也進行類型注解,
以解決不必要的麻煩
function getTotal(one: number, two: number):number{
return one + two
}
const total = getTotal(1, 2)
此時 total 就一定是 number 類型了,如果我手誤寫錯了 return one + two + '' ,代碼將會提示我,便可快速定位到問題

不知道怎么結(jié)束了!既然寫到這里了,那就繼續(xù)再寫點吧
和JS相同的數(shù)據(jù)類型就不說了,這里介紹兩種TS函數(shù)返回的兩種類型 void 和 never 兩種
void 代表此函數(shù)沒有 return 值 ,如果此函數(shù)有返回值 則報錯

never類型,這個根據(jù)TS官方文檔來看呢不太好理解,我的理解就是永遠執(zhí)行不到最后的函數(shù)
function err (): never {
throw new Error()
console.log(123)
}
err()
這就沒有問題,這個函數(shù)返回值的類型就是一個 never 的類型
如果可以走到終點的函數(shù) , 則會報錯

上方可以執(zhí)行完的函數(shù)返回值聲明為 never ,則會報錯
既然說到函數(shù)了,那就再說一下解構(gòu)的參數(shù)如何類型注解,首先看一下錯誤的注解方式

直接來看看正確的解構(gòu)參數(shù)如何類型注解吧,很簡單 ,一看就會
function getTotal ({ one, two }: { one: number; two: number }): number {
return one + two
}
const total = getTotal({ one: 1, two: 2 })
就這么多,下次再寫 886