📅  最后修改于: 2023-12-03 14:51:38.471000             🧑  作者: Mango
在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中定义类的时候,需要注意实例方法应该在实例字段之前声明,否则会引发上面的错误。