如何实现类常量?

新手上路,请多包涵

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

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

我目前正在使用只读属性,但我是 Typescript(和 JavaScript)的新手,想知道是否有更好的方法:

 get MY_CONSTANT():number {return 10};

我正在使用打字稿 1.8。建议?

PS:我现在使用的是 typescript 2.0.3,所以我接受了 大卫的回答

原文由 BeetleJuice 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 977
2 个回答

TypeScript 2.0 有 readonly 修饰符

 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

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

原文由 David Sherret 发布,翻译遵循 CC BY-SA 4.0 许可协议

您也可以简单地声明: src/classes/Car/consts/Honda.ts

 export const CIVIC: string = "Civic";

export default {
    CIVIC: CIVIC
};

然后在您的类文件中执行以下操作:

 import Honda from "./consts/Honda";

export class Car {

    protected model: string = Honda.Civic;

    [...]

}

export default Car;

这样,您可以确保它是一个常数。如果您正在构建数据集,此方法也很有效。

原文由 matreurai 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏