在隐式转换为字符串时强制在对象上调用.toString()

问题描述 投票:0回答:1

我正在寻找一种自动将对象的toString()方法用于隐式转换为字符串的方法。例如,假设您有此类:

class Dog {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  public toString(): string {
    return `${this.name} is my friend`;
  }
}

然后,我会发现此测试中的两个断言中的第二个将失败:

test.only("Dog", () => {
  const dog = new Dog("buddy");
  expect(dog.toString()).toBe("buddy is my friend");
  expect(dog as any as string).toBe("buddy is my friend"); // fails
});

我收到以下错误:

expect(received).toBe(expected) // Object.is equality
Expected: "buddy is my friend"
Received: {"name": "buddy"}

((注:如果我使用.toEqual而不是.toBe,则断言也会失败。)

我希望这样做,以便通过这个断言,即,当我通过诸如此类的隐式方法将Dog转换为字符串时(可能发生在以JavaScript项目开始的TypeScript项目中。)

是否有可能的任何建议?有什么方法可以修改Dog类以允许这样做吗?

我正在寻找一种自动将对象的toString()方法用于隐式转换为字符串的方法。例如,假设您有一个此类:class Dog {name:string; ...

typescript implicit-conversion
1个回答
0
投票
expect(dog as any as string).toBe("buddy is my friend");
© www.soinside.com 2019 - 2024. All rights reserved.