📜  声明实例方法后不允许声明实例字段.相反,这应该出现在类接口的开头 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:51:38.471000             🧑  作者: Mango

TypeScript中声明实例方法后不允许声明实例字段

在TypeScript中,声明类的时候实例方法(也称为成员函数)可以和实例字段(也称为成员变量)共存。但是,有一点需要注意的是,实例方法应该在实例字段之前声明。如果先声明了实例字段,再声明实例方法,TypeScript编译器就会报出以下错误:

TS Field 'fieldName' conflicts with class method of the same name

这个错误的意思是,实例字段和实例方法的同名冲突了。具体来说,这是因为TypeScript认为在类定义中,实例字段应该在接口定义的开头声明,而不是在实例方法之后声明。

举个例子,假设我们有一个Person类,它有一个名字和一个sayHello方法:

class Person {
  name: string;

  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

如果我们想要给这个类添加一个年龄字段age,并打算在sayHello方法之后声明它,就会引发上面说的错误:

class Person {
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }

  age: number; // 错误:与实例方法同名
}

正确的做法是把age字段放在类开头的接口定义中:

class Person {
  name: string;
  age: number;

  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

这样一来,上面的错误就消失了,同时Person类也能正确地使用实例字段和实例方法了。

总之,当我们在TypeScript中定义类的时候,需要注意实例方法应该在实例字段之前声明,否则会引发上面的错误。