在 TypeScript 的类中声明常量
How to declare constants in a Class in TypeScript
使用readonly
修饰符在类中声明常量。当类字段以readonly
修饰符为前缀时,您只能为类构造函数内部的属性赋值。在构造函数之外对属性进行赋值会导致错误。
索引.ts
class Person { readonly name = 'Alice'; readonly country = 'Austria'; logCountry() { console.log(this.country); } } const person = new Person(); person.logCountry(); // 👉️ "Austria" console.log(person.name); // 👉️ "Alice"
我们使用
只读修饰符
来防止在构造函数之外对类属性进行赋值。
使用这种方法时,我们仍然可以在构造函数中更改属性的值。
索引.ts
class Person { readonly name: string = 'Alice'; readonly country: string = 'Austria'; constructor() { this.name = 'Bob'; this.country = 'Belgium'; } logCountry() { console.log(this.country); } } const person = new Person(); person.logCountry(); // 👉️ "Belgium" console.log(person.name); // 👉️ "Bob"
如果你不想readonly
在构造函数中改变属性的值,你可以使用
static
关键字readonly
。
索引.ts
class Person { // 👇️ public if you need to access from outside the class public static readonly firstName = 'Alice'; // 👇️ private if you need to access only from inside this class private static readonly country = 'Austria'; // 👇️ protected if you need to access only from this class // and its subclasses protected static readonly age = 30; logProperties() { console.log(Person.firstName); console.log(Person.country); console.log(Person.age); } } console.log(Person.firstName); // 👉️ "Alice"
使用
static
关键字时,我们定义了静态方法或属性。静态方法和属性不能在类的实例上访问,它们只能在类本身上访问。该firstName
属性被标记为
public,这意味着它可以在任何地方访问(类内和类外)。
public
当您需要从类外部访问特定属性时,您应该使用。私有
可见性只允许从类内部访问。
标记为
受保护
的成员仅对类本身及其子类可见。
确保您访问static
的是类的属性和方法,例如
Person.firstName
,而不是类的实例。
另一种方法是在类之外声明一个常量并在类中使用它。
索引.ts
const firstName = 'Alice'; class Person { logName() { console.log(firstName); } } const person = new Person(); person.logName(); // 👉️ "Alice"
您选择哪种方法是个人喜好的问题。我会选择使用
readonly
修饰符,因为我认为这是最直接、最直观的方法。