【Typescript小小冊】基本類型

概述

Javascript沒有強制的類型檢查,不同類型的變量可以互相賦值,因此可能會引發一些因爲類型匹配而發生的問題。Typescript的變量都具有類型,包括基本類型和複合類型,不同的類型之間不一定兼容。

聲明

要聲明一個變量的類型,需要採用如下的語法:

let a: string = 'a'

其中: string表示變量a是一個字符串類型。等號之後表達式的值必須與變量類型兼容,否則編譯器會報錯。

在變量初始化定義語句中,如果沒有聲明等號左邊的變量的類型,編譯器會根據等號右邊變量的類型來推斷等號左邊變量的類型。

示例:

let a = 'a' // a是string類型
let b =  1 // b是number類型
let c = a // c是string類型
c = b // 錯誤。無法將number類型賦值給string類型

類型

Typescript的基本類型有:

  • string
  • number
  • boolean
  • symbol
  • null
  • undefined
  • any
  • unknown
  • never
  • void

string, number, boolean, symbol

stringnumberbooleansymbol對應Javascript中包裝類StringNumberBooleanSymbol的區別。但是前者是類型,後者本質上是構造函數。

在編程中,應始終使用前者來表示變量的類型。

null, undefined

nullundefined被單獨作爲變量類型,與其它類型並不兼容。null表示空指針,但是不能將null理解爲其它面嚮對象語言中未實例化的空變量。

any

當一個變量的類型是任意或無法確定時,我們可以聲明它爲any類型。

any類型變量可以賦值給任意類型的變量,也可以被賦值爲任意類型變量。可以讀取它的任意屬性(即使不存在),讀取的屬性也是any類型。

編譯器不會對any類型變量做類型檢查,因此有時候可能有風險,在一些語法檢查工具(如ESLint)常常不允許使用any

示例:

let a: any = 0

let b: number = a
let c: string = a
let d = a.value
a = 'a'

unknown

爲了彌補any過於寬泛和自由的弊病,但同時有需要一種表示未知的類型,unknown出現了。

unknown可以被賦值爲任意類型的變量,但是隻能賦值給unknownany類型的變量,同時也不能讀取它的任何屬性。

示例:

let a: unknown = 0

let b: number = a // 錯誤
let c: string = a // 錯誤
let d = a.value // 錯誤
a = 'a' // 合法

它的作用之一是預先聲明一個不確定類型的變量,等到實際使用時再轉換類型。示例:

let a: unknown // 聲明
a = 'a' // 賦值
let b:string = a as string // 使用 

也可以作爲兩種無法兼容的類型轉換時的中間類型(這種操作可能有風險)。示例:

let a:string = (0 as unknown) as string

有關類型轉換的內容將在之後介紹。

never

never表示正常情況下無法到達的類型,比如拋出異常的函數:

function error(): never {
  throw new Error('error')
}

void

void表示空類型,通常用在沒有返回值的函數上。

示例:

function log(arg: string): void{
  console.log(arg)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章