Самое близкое - переопределить методы toString
и / или valueOf
, унаследованные от Object.prototype
. Но : console.log
не использует их в большинстве реализаций, вам придется сделать console.log(String(person))
или аналогичный.
Например, toString
:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
toString(): string {
return this.name;
}
}
Пример Live (JavaScript, Версия TypeScript на игровой площадке ):
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
toString() {
return this.name;
}
}
const person = new Person('Jim', 28);
console.log(String(person));
Аналогично, если вы переопределите valueOf
и вернете число, то при использовании числового оператора с вашим экземпляром будет использоваться число valueOf
, возвращаемое:
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
valueOf() {
return this.age;
}
}
const person = new Person('Jim', 28);
console.log(person + 4); // 32
valueOf
может вернуть что угодно (включая строку), хотя, если он возвращает не примитив, этот объект будет преобразован в примитив обычным способом для этогоobject.
Примечание: вы можете сэкономить некоторое время при наборе текста, используя автоматическое объявление свойства TypeScript:
class Person {
constructor(public name: string, public age: number) {
}
toString(): string {
return this.name;
}
}
public
в списке параметров для конструктора сообщает TypeScript:создайте их как публичные свойства и назначьте их в коде конструктора.