ts教程要點說明

ts-node 是一個非官方的 npm 模塊,可以直接運行 TypeScript 代碼。

  • npm install -g ts-node
  • ts-node script.ts
  • 如果執行 ts-node 命令不帶有任何參數,它會提供一個 TypeScript 的命令行 REPL 運行環境,你可以在這個環境中輸入 TypeScript 代碼,逐行執行。
    ts-node
  • 要退出這個 REPL 環境,可以按下 Ctrl + d,或者輸入.exit。

TypeScript 提供了一個編譯選項noImplicitAny,打開該選項,只要推斷出any類型就會報錯。

  • tsc --noImplicitAny app.ts
  • 這里有一個特殊情況,即使打開了noImplicitAny,使用let和var命令聲明變量,但不賦值也不指定類型,是不會報錯的。

unknown跟any的相似之處,在于所有類型的值都可以分配給unknown類型。

  • unknown類型的變量,不能直接賦值給其他類型的變量(除了any類型和unknown類型)。這就避免了污染問題,從而克服了any類型的一大缺點。
  • 不能直接調用unknown類型變量的方法和屬性。
  • unknown類型變量能夠進行的運算是有限的,只能進行比較運算(運算符==、===、!=、!==、||、&&、?)、取反運算(運算符!)、typeof運算符和instanceof運算符這幾種,其他運算都會報錯。
  • TypeScript 有兩個“頂層類型”(any和unknown),但是“底層類型”只有never唯一一個。

注意,如果沒有聲明類型的變量,被賦值為undefined或null,在關閉編譯設置noImplicitAny和strictNullChecks時,它們的類型會被推斷為any。如果希望避免這種情況,則需要打開編譯選項strictNullChecks。

TypeScript 提供了一個編譯選項strictNullChecks。只要打開這個選項,undefined和null就不能賦值給其他類型的變量(除了any類型和unknown類型)。

  • 打開strictNullChecks以后,undefined和null這兩種值也不能互相賦值了。
  • 總之,打開strictNullChecks以后,undefined和null只能賦值給自身,或者any類型和unknown類型的變量。

聯合類型可以與值類型相結合,表示一個變量的值有若干種可能。

  • let rainbowColor:'赤'|'橙'|'黃'|'綠'|'青'|'藍'|'紫';

交叉類型常常用來為對象類型添加新屬性。

type A = { foo: number };
type B = A & { bar: number };

  • 上面示例中,類型B是一個交叉類型,用來在A的基礎上增加了屬性bar。

TypeScript 將typeof運算符移植到了類型運算,它的操作數依然是一個值,但是返回的不是字符串,而是該值的 TypeScript 類型。

const a = { x: 0 };
type T0 = typeof a; // { x: number }
type T1 = typeof a.x; // number

  • 這種用法的typeof返回的是 TypeScript 類型,所以只能用在類型運算之中(即跟類型相關的代碼之中),不能用在值運算。

子類型可以賦值給父類型,反之不可以

let a:'hi' = 'hi';
let b:string = 'hello';
b = a; // 正確,a是值類型hi,它是string類型的子類
a = b; // 報錯,b是a的父類型,不可以
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容