typescript - 如何实现类常量?

标签 typescript class-constants

在 TypeScript 中,const 关键字不能用于声明类属性。这样做会导致编译器出现“类成员不能具有‘const’关键字”的错误。

我发现自己需要在代码中明确指出不应更改某个属性。如果我在属性声明后尝试为其分配新值,我希望 IDE 或编译器出错。你们是如何做到这一点的?

我目前使用的是只读属性,但我想知道是否有更好的方法:

get MY_CONSTANT():number {return 10};

我正在使用 typescript 1.8。有什么建议吗?

PS:我现在使用的是 typescript 2.0.3,所以我接受了 David's answer

最佳答案

TypeScript 2.0 有 readonly modifier :

class MyClass {
    readonly myReadOnlyProperty = 1;

    myMethod() {
        console.log(this.myReadOnlyProperty);
        this.myReadOnlyProperty = 5; // error, readonly
    }
}

new MyClass().myReadOnlyProperty = 5; // error, readonly

它不完全是常量,因为它允许在构造函数中赋值,但这很可能没什么大不了的。

替代解决方案

另一种方法是使用 static 关键字和 readonly:

class MyClass {
    static readonly myReadOnlyProperty = 1;

    constructor() {
        MyClass.myReadOnlyProperty = 5; // error, readonly
    }

    myMethod() {
        console.log(MyClass.myReadOnlyProperty);
        MyClass.myReadOnlyProperty = 5; // error, readonly
    }
}

MyClass.myReadOnlyProperty = 5; // error, readonly

这样做的好处是不能在构造函数中赋值,只能存在于一个地方。

关于typescript - 如何实现类常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265275/

相关文章:

javascript - 2D 对象数组 - 传递引用副本时替换数组对象

typescript - typescript 中的var和let有什么区别?

Java 使用 HashMap 和 switch 语句

reactjs - 绑定(bind)元素 'note' 隐式具有 'any' 类型

angular - 从 Angular 中的子组件调用父组件函数

javascript - 在 typescript 中给响应一种获取响应?

php - 我可以在 PHP 类上定义 CONST 吗?

php 类常量可见性

ruby - 检查 Ruby 类中是否已定义常量的正确方法