TypeScript this型別
鏈式呼叫大家一定不陌生,比如在jQuery中有廣泛應用。
通過使方法返回當前物件 (也就是this) 就能夠建立鏈式呼叫功能。
看如下程式碼例項:
[typescript] 純文字檢視 複製程式碼export default class BasicCalculator { public constructor(protected value: number = 0) { } public currentValue(): number { return this.value; } public add(operand: number) { this.value += operand; return this; } public subtract(operand: number) { this.value -= operand; return this; } public multiply(operand: number) { this.value *= operand; return this; } public divide(operand: number) { this.value /= operand; return this; } }
然後引入此模組,通過鏈式呼叫實現相關計算功能:
[typescript] 純文字檢視 複製程式碼import calc from "./BasicCalculator"; let v = new calc(2) .multiply(5) .add(1) .currentValue();
通過鏈式方式連續不斷的呼叫相關方法,實現方式就是各個方法返回this(也就是物件本身)。
下面再來看一段程式碼例項:
[typescript] 純文字檢視 複製程式碼import BasicCalculator from "./BasicCalculator"; export default class ScientificCalculator extends BasicCalculator { public constructor(value = 0) { super(value); } public square() { this.value = this.value ** 2; return this; } public sin() { this.value = Math.sin(this.value); return this; } }
ScientificCalculator繼承BasicCalculator類。
在之前,BasicCalculator的方法返回this, 返回值型別被推斷為BasicCalculator,如果在ScientificCalculator的例項上呼叫屬於 BasicCalculator的方法,將會報錯。
程式碼如下:
[typescript] 純文字檢視 複製程式碼import calc from "./ScientificCalculator"; let v = new calc(0.5) .square() .divide(2)// 返回值類將被推斷為BasicCalculator .sin() // 將會報錯,因為BasicCalculator類不具有此方法 .currentValue();
在之前,程式碼將會報錯,TypeScript1.7增加了this型別,那麼divide()返回值型別將會被推斷為this型別。
前面其實展現了this型別的多型,不但可以是父類型別,也可以是子類型別,也可以是實現的介面型別。
this 型別在描述一些使用了 mixin 風格繼承的庫 (比如 Ember.js) 的交叉型別:
[typescript] 純文字檢視 複製程式碼interface MyType { extend<T>(other: T): this & T; }
相關文章
- TypeScript 泛型型別TypeScript泛型型別
- TypeScript 型別相容TypeScript型別
- TypeScript 交叉型別TypeScript型別
- Typescript:基本型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript 索引型別TypeScript索引型別
- TypeScript 型別安全TypeScript型別
- TypeScript type 型別別名TypeScript型別
- TypeScript 型別系統TypeScript型別
- Typescript高階型別TypeScript型別
- 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資料型別
- 【譯】TypeScript 的型別(一)TypeScript型別
- TypeScript 字串字面量型別TypeScript字串型別
- TypeScript 混合型別介面TypeScript型別
- TypeScript Null和Undefined 型別TypeScriptNullUndefined型別
- TypeScript(3)基礎型別TypeScript型別
- TypeScript 之對映型別TypeScript型別
- TypeScript 可索引型別介面TypeScript索引型別
- TypeScript 強大的型別別名TypeScript型別
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- TypeScript 可辨識聯合型別TypeScript型別