如何获取对象的类型定义名称?

时间:2018-11-26 07:45:03

标签: angular typescript

如果代码如下所示,

    interface foo {
        one: number;
        two: string;
    }

const bar: foo = { one: 5, two: "hello" };

然后如何获取常量'bar'的类型定义? 使用

console.log(typeof bar);

我得到的是“对象”,但没有确切的定义名称。

谢谢。

1 个答案:

答案 0 :(得分:1)

接口,类型和环境声明在编译期间均被删除。这是在TypeScript文档中可以找到的“类型擦除”的概念。

如果需要类型继续存在,则需要使用编译后仍保留的构造。例如:

class Foo {
    constructor(public one: number, public two: string) { }
}

const foo = new Foo(5, 'hello');

console.log(foo.constructor.name);

如果需要区分类型,TypeScript中有一种模式称为Discriminated Union,这可能是您要寻找的-在其他大多数情况下,应谨慎使用此类信息。