簡體   English   中英

TypeScript中模塊上的getter / setter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM