如何在typescript类中声明类级常量

1,931 阅读2分钟

Typecript中的类属性常量

Constants 是固定的值,一旦分配了值就不能再修改。这些可以像java等编程语言中的成员变量一样在类中声明。

但是typescript不允许类的常量。

如果类中声明了常量的成员变量,会发生什么?

class Employee {
    const defaultValue = 10;

    calculate() {
        console.log(this.defaultValue);
    }
}

在上面的类中,有一行常量声明会产生编译错误 ,一个类的成员不能有'const'

我们有很多方法可以实现在typecript类声明中声明成员常量:

  • readonly关键字
  • 带有只读属性的静态

只读属性的常量

关键字readonly ,在typecript语言中加入了2.0 版本。

重要提示

  • readonly 属性一旦被赋值就不会被修改。
  • 一种方法是在readonly 属性中声明并赋值。
  • 另一种方法是在类中声明只读属性,只在构造函数中赋值。
  • 在构造函数之外分配readonly 属性是不允许的。

同样的类可以用readonly属性关键字来重写

readonly 当属性被声明时,属性会被赋值,如下所示

class Employee {

    readonly defaultValue = 10;

    calculate() {
        console.log(this.defaultValue);
        this.defaultValue=40 // gives compilation error
        console.log(this.defaultValue);
    }
}

readonly 属性使得属性被初始化并作为常量使用。

如果你试图分配新的值,即this.defaultValue=40,它会抛出错误不能分配给'defaultValue',因为它是一个只读的属性

只读属性可以被声明,但不能被分配,在构造函数中初始化其值,如下所示

class Employee {
    readonly defaultValue:number ;
    constructor(value: number){
      this.defaultValue=value;
    }
    calculate() {
        console.log(this.defaultValue);

    }
}
let emp=new Employee(123)
emp.calculate();

静态的只读属性常量

static 只允许在类的层面上声明和赋值。不允许在构造函数和其他地方赋值。

class Employee {
    static readonly defaultValue:number ;
    constructor(value: number){
      Employee.defaultValue=value; // gives compilation error
    }
    calculate() {
        console.log(Employee.defaultValue);

    }
}

let emp=new Employee(123)
emp.calculate();

带有只读属性的静态与真正的常量的行为是一样的。

总结

在本教程中,你学会了如何在typescript类中声明类级常量。