打字稿中的公共静态内容

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

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

类型记录中是否存在公共静态常数?

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

可以Library.BOOK_SHELF_NONE而且TSC也不抱怨。但是如果我尝试在其他地方使用类库,并且尝试做同样的事情,它就不会识别它。

提问于
用户回答回答于

下面是这个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简单地附加到导出函数(作为其属性);因此,只要正确访问函数本身,它们就应该是可访问的。

用户回答回答于

如果确实希望在现代浏览器中表现得更像静态常量值(因为它不能被其他代码更改),则可以添加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);

如果运行它,看到如何设置BOOK_SHELF_NONE属性为新值的属性不能工作。

2.0

在打字本2.0中,可以使用readonly为了取得非常类似的结果:

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

扫码关注云+社区