TypeScript的公共静态常量是什么?

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

TypeScript中存在公共静态常量吗?我有一个类似如下的类:

export class Library {
  public static BOOK_SHELF_NONE: string = "None";
  public static BOOK_SHELF_FULL: string = "Full";
}

在那个类上,我可以做Library.BOOK_SHELF_NONE,但是如果我尝试在其他地方使用类库,并尝试做同样的事情,它不会识别它。

婷留婷留提问于
uncle_light培知回答于

以下是编入(通过TS Playground)的TS代码片段:

define(["require", "exports"], function(require, exports) {
    var Library = (function () {
        function Library() {
        }
        Library.BOOK_SHELF_NONE = "None";
        Library.BOOK_SHELF_FULL = "Full";
        return Library;
    })();
    exports.Library = Library;
});

所见,定义为的两个属性public static都仅附加到导出的函数(作为其属性); 因此只要正确访问函数本身,它们就应该可以访问。

好耶网络it回答于

你可以添加一个get唯一的访问器Library(这只适用于ES5 +浏览器和NodeJS) :

export class Library {
    public static get BOOK_SHELF_NONE():string { return "None"; }
    public static get BOOK_SHELF_FULL():string { return "Full"; }   
}

var x = Library.BOOK_SHELF_NONE;
console.log(x);
Library.BOOK_SHELF_NONE = "Not Full";
x = Library.BOOK_SHELF_NONE;
console.log(x);

2.0

在TypeScript 2.0中,可以使用readonly来获得非常相似的结果:

export class Library {
    public static readonly BOOK_SHELF_NONE = "None";
    public static readonly BOOK_SHELF_FULL = "Full";
}

语法更简单,更明显。但是,编译器可以防止更改而不是运行时间(不像第一个示例中那样,根本不允许更改)。

扫码关注云+社区