如何在 TypeScript 中在运行时获取对象的类名?
大家好!我是 TypeScript 新手,遇到了一个问题。我有一个类层次结构,需要在运行时知道某个对象是哪个类的实例。在普通 JavaScript 中,我会使用 `obj.constructor.name`,但在 TypeScript 中,这并没有按我预期的方式工作。
以下是示例代码:
```typescript
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
}
const myPet = new Dog('Rex', 'Labrador');
// 尝试获取类名
console.log(myPet.constructor.name); // 在 JS 中有效,但在 TS 中...
```
问题在于,当 TypeScript 编译为 JavaScript 时,特别是如果使用了代码压缩或打包(例如,webpack 的生产模式),`constructor.name` 可能不会返回 "Dog",而是一个单字母的字符串,甚至返回 `undefined`。我读过