【譯】TypeScript 的型別(一)

liaozeen發表於2019-03-24

【譯】TypeScript 的型別(一)

JavaScript 很酷。但是你知道比JavaScript更酷的是什麼嗎?

是Typescript。

你能說出下面程式碼哪裡出錯了嗎?

img

img

TypeScript (左) and ES6 (右)

看到紅色下劃線了嗎?這是Typescript給我們的錯誤提示。

你可能找到這個錯誤了—— toUpperCase() 是 字串型別的方法。我們把一個整數作為引數傳入,不過整數不能呼叫 toUpperCase()

我們來修改它,限制 nameToUpperCase() 的引數為字串型別。

【譯】TypeScript 的型別(一)

現在我們不必記住 nameToUpperCase() 只能接受一個字串作為引數,讓Typescript幫我們來記住它。想象下,如果要記住成千上萬個方法以及其引數的型別,那會瘋掉的。

但是還是出現紅色提示。這是為什麼?因為我們傳的還是一個數字!我們現在來傳個字串。

【譯】TypeScript 的型別(一)

注意到Typescript會編譯成JavaScript(它只是JavaScript的超集,像C++和C)

Typescript的靜態型別檢查簡單而強大。

在上個月,TypeScript已經下載了10,327,953次。

1*12nXNNgYHMLqWl7FWe4mwQ

Typescript與Flow的下載量比較

讓我們來探索Typescript世界——我們稍後會深入探討,首先明白Typescript是什麼以及為什麼存在。

TypeScript於2012年10月1日首次亮相。 它起源於微軟,由 Anders Hejlsber(領導設計C#)和他的團隊開發。

Typescript完全公開在Github上,所以任何人都可以閱讀原始碼和貢獻。

【譯】TypeScript 的型別(一)

Typescript——JavaScript的超集

怎麼開始

很簡單,我們需要的是NPM包。開啟你的終端,然後跟著以下輸入:

我們應該做好Typescript的配置。

img

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs"
    }
}
複製程式碼

我們需要做的是建立.ts 檔案,並告訴Typescript監測程式碼的變化,並進行編譯。

執行以下命令進行程式碼監測:

tsc -w
複製程式碼

tsc—Typescript的編譯指令

這就是我們最終生成的檔案

img

現在你可以按照我們的例子來完成!

我們在.ts檔案裡寫程式碼,.js檔案是給瀏覽器讀取的。在本文的例子中,我們沒有用瀏覽器,而是使用Node.js(Node也能讀.js

img

JavaScript有七種資料型別,其中六種是基礎型別,剩下的一種是物件型別。

JavaScript 的基礎型別有:

  • String
  • Number
  • Undefined
  • Null
  • Symbol
  • Bollean

剩下的是物件型別

img

Typescript除了和JavaScript一樣有基礎型別,也擴充了額外的型別。

這些額外的型別是可選的,如果你不熟悉,你不一定要使用。

額外的型別如下:

Tuple

img

可以把 tuple 想象為有結構的陣列。你按順序預先定義陣列元素的型別。

【譯】TypeScript 的型別(一)

如果我們不按 tuple 的相應位置的型別分配相應的型別,Typescript會提示我們規則錯誤。

void

【譯】TypeScript 的型別(一)

tuple 期望第一個變數是 number 型別—在這裡例子中,它不是數字型別,而是字串 "Indrek" ,所以會提示我們錯誤。

【譯】TypeScript 的型別(一)

在typescript裡,你必須在函式裡定義返回型別。像這樣:有些函式沒有 return語句

img

注意我們如何宣告引數型別和返回型別 - 兩者都是字串。

現在看看如果我們不返回任何東西會發生什麼?

【譯】TypeScript 的型別(一)

可以看到Typescript編譯程式告訴我們:"你定義了返回型別為字串,但現在卻沒有返回任何東西。現在告訴你,我們沒有遵守提示的規則。"

如果我們不知道需要返回什麼時怎麼辦?這種情況我們可以使用 Void 定義返回型別。

img

但是在這個例子裡,如果我們要返回一個值,我們就不能定義返回型別為 void

【譯】TypeScript 的型別(一)

Any

img

any 型別非常簡單。如果我們不知道是什麼型別時可以使用 any

img

注意到我們多次給 person 重新分配不同型別的值。第一次是字串,然後是數字,最後是布林值。我們不確定其型別。

現實世界的例子是,如果你使用第三方庫而你不知道型別。

我們來建立一個陣列,把一些資料儲存在陣列裡。陣列是由不同型別的資料組成,不僅僅是字串,或數字,又或者有結構的型別,像 tupleany型別就會起作用。

img

如果你的陣列裡只是一種型別,你可以明確告訴編譯器,像這樣:

img

如果你想了解更多,這裡有文件介紹。

中文文件:www.tslang.cn/docs/handbo…

英文文件:www.typescriptlang.org/docs/handbo…

相關文章