TypeScript 型別推斷
TypeScript中,有些資料沒有明確指定型別,但是可以通過型別推斷給出型別。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼let str="螞蟻部落";
上面程式碼中,str會被推斷為string型別資料,截圖如下:
型別發生在初始化變數和成員,設定預設引數值和決定函式返回值時。
當要從幾個表示式中推斷型別時候,會從這些表示式的型別來推斷出一個最合適的通用型別。
也就是對所有的成員都是適合的,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼let arr = [0, 1, null];
陣列成員中,除了數字還有一個null,型別並不完全一致,那麼就要推斷出一種相容所有資料的型別。
在預設情況下null是其他所有型別的子型別,所以number型別是最佳型別,截圖如下:
如果在tsconfig.json檔案中設定strictNullChecks為true,那麼推斷型別就變為聯合型別。
截圖如下:
關於null型別可以參閱TypeScript Null和Undefined 型別一章節。
通用型別取自候選型別,有時候選型別共享相同的通用型別,但卻沒有一個型別能做為所有候選型別的通用型別。
看如下程式碼例項:
[typescript] 純文字檢視 複製程式碼interface IAnimal{ leg:number; color:string; } class Bird{ leg=2; color="white"; fly(){ // code } } class Insect { leg=8; color="black"; eat(){ // code } } let antzone = [new Bird(), new Insect()];
Bird和Insect型別任何一個都不能相容所有其他型別,這時候被推斷出聯合型別。
程式碼如下:
這和第一個程式碼例項是一樣的,我們也可以顯式的指定陣列的型別為IAnimal。
程式碼如下:
[typescript] 純文字檢視 複製程式碼let antzone:IAnimal[] = [new Bird(), new Insect()];
也可以按照上下文推斷型別,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼let antzone = function(webName: string, age: number): string { return webName+"已經成立"+age+"年了"; }
上面程式碼可以由右邊推斷出antzone的型別為:
[typescript] 純文字檢視 複製程式碼(webName:string, age:number) => string
再來看一段程式碼例項:
[typescript] 純文字檢視 複製程式碼let antzone: (webName:string, age:number) => string= function(name, webAge){ return name+"已經成立"+webAge+"年了"; }
由左到右推斷型別。
相關文章
- Typescript型別推斷技巧你知道麼?TypeScript型別
- TypeScript 型別斷言TypeScript型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- Java™ 教程(型別推斷)Java型別
- Objective-C型別推斷Object型別
- TypeScript this型別TypeScript型別
- Java 10新特性:型別推斷Java型別
- c/c++ 模板 型別推斷C++型別
- TypeScript 入門自學筆記 — 型別斷言(二)TypeScript筆記型別
- TypeScript 泛型型別TypeScript泛型型別
- TypeScript 型別相容TypeScript型別
- TypeScript 交叉型別TypeScript型別
- Typescript:基本型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript 索引型別TypeScript索引型別
- TypeScript 型別安全TypeScript型別
- Vue 2.5 & TypeScript: API 引數中的型別推導VueTypeScriptAPI型別
- TypeScript type 型別別名TypeScript型別
- C++ 11 新特性之型別推斷與型別獲取C++型別
- C++ auto 型別推斷注意的地方C++型別
- TypeScript 型別系統TypeScript型別
- Typescript高階型別TypeScript型別
- TypeScript 聯合型別TypeScript型別
- TypeScript 型別保護TypeScript型別
- TypeScript void 型別TypeScript型別
- TypeScript 陣列型別TypeScript陣列型別
- TypeScript 函式型別TypeScript函式型別
- TypeScript 數值型別TypeScript型別
- TypeScript 布林型別TypeScript型別
- TypeScript Widened型別TypeScriptIDE型別
- TypeScript 對映型別TypeScript型別
- TypeScript 元組型別TypeScript型別
- TypeScript 字面量型別TypeScript型別
- TypeScript資料型別TypeScript資料型別
- TypeScript型別系統和基礎型別TypeScript型別
- TypeScript-----資料型別TypeScript資料型別