[英]getter/setter on a module in TypeScript
我在我的TypeScript項目中使用AMD模塊(編譯器標志“--module amd”)。 雖然我可以在我的課程上輕松使用getter / setter,但我想在我的模塊上做同樣的事情
export get abc() : string {
return "abc";
}
回報
錯誤TS1008:意外的令牌; '模塊,類,接口,枚舉,導入或聲明'預期。
和
export function get abc() : string {
return "abc";
}
回報
錯誤TS1005:'('預期。
我究竟做錯了什么?
您現在只能將getter和setter添加到類中。
TypeScript在getter和setter上使用的代碼轉換將屬性添加到對象的原型中,這對於類而言比對模塊更有意義。
這是可能的,使用特殊的export = ...
語法如下:
class MyModule {
get abc() {
return "abc";
}
}
var myModule = new MyModule();
export = myModule;
這使得MyModule
類的實例充當模塊的API。 您不必在類中放置任何數據 - 只需將您的函數移入其中,否則保持不變。 缺點是如果函數a
調用函數b
,則必須說this.b()
或myModule.b()
(后者更接近正常的模塊導出)。
您還必須先聲明一個命名變量。 你不能只說:
export = new MyModule(); // This doesn't work
僅供未來訪客參考......
類似於@Daniel Earwicker所說的並解釋@ billc.cn所說的內容,您也可以將類與命名空間混淆,然后將getter / setter定義為靜態方法:
export class X {
static get abc():string {
return "abc";
}
}
export namespace X {
// ... other code
}
但這意味着你的庫(模塊)中將有一個命名空間,除非你想改變你的庫屬性的方式,你將不得不做hack export = X;
@Daniel Earwicker提到。
https://www.typescriptlang.org/docs/handbook/declaration-merging.html
您可以通過類直接導出您的getter,如下所示:
// helper class to be removed when/if module-level getters are available
class _someHelper {
static get myStaticString(): string {
return "hi, world";
}
}
export const myStaticString = _someHelper.myStaticString;
然后導入如下:
import { myStaticString } from "my-module";
不是最漂亮的,但確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.