在TypeScript中运行时获取对象的类名

是否可以使用typescript在运行时获取对象的类/类型名称?

class MyClass{}

var instance = new MyClass();

console.log(instance.????); // Should output "MyClass"

Adam Mills asked 2019-04-11T03:14:30Z

9个解决方案

306 votes

简单回答:

class MyClass {}

const instance = new MyClass();

console.log(instance.constructor.name); // MyClass

console.log(MyClass.name); // MyClass

但是:请注意,使用缩小代码时名称可能会有所不同。

Mikael Couzic answered 2019-04-11T03:14:50Z

21 votes

我知道我迟到了,但我发现这也有效。

var constructorString: string = this.constructor.toString();

var className: string = constructorString.match(/\w+/g)[1];

另外...

var className: string = this.constructor.toString().match(/\w+/g)[1];

上面的代码将整个构造函数代码作为字符串获取并应用正则表达式来获取所有“单词”。 第一个单词应该是'function',第二个单词应该是该类的名称。

希望这可以帮助。

answered 2019-04-11T03:15:27Z

19 votes

看到这个问题。

由于TypeScript被编译为JavaScript,因此在运行时您运行的是JavaScript,因此将应用相同的规则。

Matt Burland answered 2019-04-11T03:16:01Z

15 votes

我的解决方案不是依赖类名。 object.constructor.name在理论上有效。 但是如果你在像Ionic这样的东西上使用TypeScript,那么一旦你进入制作阶段,它就会起火,因为Ionic的制作模式会缩小Javascript代码。 因此,类被命名为“a”和“e”。

我最终做的是在构造函数为其分配类名的所有对象中都有一个typeName类。 所以:

export class Person {

id: number;

name: string;

typeName: string;

constructor() {

typeName = "Person";

}

是的,这不是问的,真的。 但是使用constructor.name来解决可能会缩小规模的问题只是让人头疼。

SonOfALink answered 2019-04-11T03:16:42Z

8 votes

您需要先将实例强制转换为any,因为Function的类型定义没有name属性。

class MyClass {

getName() {

return (this).constructor.name;

// OR return (this as any).constructor.name;

}

}

// From outside the class:

var className = (new MyClass()).constructor.name;

// OR var className = (new MyClass() as any).constructor.name;

console.log(className); // Should output "MyClass"

// From inside the class:

var instance = new MyClass();

console.log(instance.getName()); // Should output "MyClass"

更新:

使用TypeScript 2.4(可能更早),代码可以更清晰:

class MyClass {

getName() {

return this.constructor.name;

}

}

// From outside the class:

var className = (new MyClass).constructor.name;

console.log(className); // Should output "MyClass"

// From inside the class:

var instance = new MyClass();

console.log(instance.getName()); // Should output "MyClass"

Westy92 answered 2019-04-11T03:17:20Z

5 votes

在Angular2中,这有助于获取组件名称:

getName() {

let comp:any = this.constructor;

return comp.name;

}

comp:any是必需的,因为typescript compile会发出错误,因为Function最初没有属性名。

Admir Sabanovic answered 2019-04-11T03:17:54Z

3 votes

不得不添加“.prototype”。 使用:error TS2339: Property 'name' does not exist on type 'Function'。

否则使用以下代码:error TS2339: Property 'name' does not exist on type 'Function',我有打字稿错误:

error TS2339: Property 'name' does not exist on type 'Function'。

Flox answered 2019-04-11T03:18:34Z

3 votes

完整的TypeScript代码

public getClassName() {

var funcNameRegex = /function (.{1,})\(/;

var results = (funcNameRegex).exec(this["constructor"].toString());

return (results && results.length > 1) ? results[1] : "";

}

Nati Krisi answered 2019-04-11T03:19:05Z

0 votes

如果您已经知道期望的类型(例如,当方法返回联合类型时),那么您可以使用类型保护。

例如,对于原始类型,您可以使用一种类型的保护:

if (typeof thing === "number") {

// Do stuff

}

对于复杂类型,您可以使用instanceof guard:

if (thing instanceof Array) {

// Do stuff

}

Cocowalla answered 2019-04-11T03:19:43Z

gettype获取类名_在TypeScript中运行时获取对象的类名相关推荐

  1. java jcombobox 获取值_从java中的JComboBox获取字符串值

    我正在做一个testJComboBox程序.一旦我选择了jCombobox的输出,我就会得到我需要的字符串值.但是,它不起作用. 这是我的代码: import java.awt.*; import j ...

  2. 【Vivado那些事儿】Vivado中运行时出现visual c++运行错误的解决办法

    Vivado中运行时出现visual c++运行错误的解决办法 Win10系统中运行Vivado一直好好的,某一天突然出现visual c++运行错误,如下图所示: 修复也没什么作用,卸载重装是同样的 ...

  3. java hibernate方言_java – 如何在运行时获取Hibernate方言

    在我的应用程序中,我使用Hibernate与SQL Server数据库,所以我设置 在我的persistence.xml中. 在某些情况下,我想用NULL包括排序记录,我使用关键字NULLS FIRS ...

  4. java 获取运行时参数,Java8增强反射可以在运行时获取参数名

    技术公众号:Java In Mind(Java_In_Mind),欢迎关注! 原文:Java8增强反射可以在运行时获取参数名 介绍 在JDK增强意见:JPE 118:Access to Paramet ...

  5. java 运行时获取泛型真实类型

    前情提要 本文章用于运行时获取泛型的具体类型,有一些情况下可以获取到真实类型,有一些情况下获取不到的情况. Class 类的两个方法 /*** Returns the {@code Class} re ...

  6. 如何在程序运行时获取 dpdk-16.04 大页使用情况?

    前言 基于 dpdk-16.04 开发的 dpdk 程序需要使用的大页内存总大小可以通过计算得出,但由于 dpdk-16.04 legacy memory 模型只支持物理地址连续的 segment 内 ...

  7. [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题

    [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题 参考文章: (1)[原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C ...

  8. 为什么vs2005内置Web application server中调用COM组件时正常,在IIS中运行时组件创建失败?...

    如题. 在vs2005内置服务器中运行正常,发布到IIS中运行时出现组件创建失败的错误.错误页面如 下: 不知道有没有遇到过这种情况的兄弟?麻烦指点一二.谢谢!

  9. python怎么在运行中查看执行状态_python,_python程序运行时 查看对象状态,python - phpStudy...

    python程序运行时 查看对象状态 不知大家有没有用过Rthymbox的python console. Rthymbox可以在运行的时候,让它的 交互式命令行 对程序进行控制. 比如说可以调用pla ...

最新文章

  1. 浅析Java线程池 ExecutorService
  2. Android 性能优化——之图片的优化
  3. C# 获得窗体句柄并发送消息(利用windows API可在不同进程中获取)
  4. 程序员面试金典 - 面试题 01.09. 字符串轮转
  5. php抽象类的构造函数,抽象类的构造函数
  6. avue-crud 使用_创建和使用CRUD存储过程
  7. java生成数据库设计说明书(excel)
  8. 和老师们合作,注定了是打工的(转)
  9. pandas—dropna
  10. [转]SecureCRT使用配置详细图文教程
  11. 既是手机直播投屏工具又是安卓模拟器?游戏主播和手游玩家都来了解一下
  12. 微信小程序-视频教程-链接地址
  13. 计算机飞行模式无法关闭,Win10开启飞行模式之后无法关闭退出怎么解决
  14. 单片机蓝桥杯之LED点亮(国信CT107D开发板)
  15. iOS 技术支持网址
  16. TMS570-6-HET PWM
  17. web前端---css基础
  18. 万花哥特体繁黑执事中文字体_50多种免费的高质量哥特式和恐怖字体
  19. 浪潮服务器NF5280m5 配置,raid和系统 安装纪录
  20. 电信信息服务器,中国电信网上营业厅

热门文章

  1. Python MySQL创建表
  2. 商城是用jsp还是php,建设网上购物网站使用JSP系统还是ASP系统
  3. 软件定义汽车带来的困境——如何破局?
  4. wps表格里面计算机在哪里,WPS的Word居然还有计算神器?在哪里能找到又是怎么进行计算呢?...
  5. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...
  6. 软件开发报价模板_定制开发小程序和行业通用(模板)小程序的利弊分析
  7. octave错误-error: ‘squareThisNumber‘ undefined near line 1 column 1
  8. win10 make命令的安装
  9. LNK2019无法解析的外部符号 public: static struct cv::Ptr class cv::xfeatures2d::SURF问题解决
  10. 【Jmeter篇】如何利用Jmeter配置元件计数器、随机变量制造批量数据和变量参数化?