小编典典

如何实现类常量?

all

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

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

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

get MY_CONSTANT():number {return 10};

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

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


阅读 122

收藏
2022-03-08

共1个答案

小编典典

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关键字 with 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

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

2022-03-08