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

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-Maximal Rectangle-最大矩形

https://oj.leetcode.com/problems/maximal-rectangle/ 一堆0,1矩阵中计算出由1组成的长方形的最大面积。 使用了直方图求最大面积的算法。枚举每一行p,然后在将一行上的所有列看做朝i>p方向出发的直方图,然后在这个直方图上用栈存储递增序列的那个一…

cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题 :响应时间、执行时间…

java中日历类:Calendar

Calendar日历类 该类为抽象类,将所有可能用到的时间信息封装为静态成员变量,方便获取时间属性,其位于java.util.Calendar, 其中的getInstance方法可以返回一个Calendar类的子类对象,可以直接使用次子类进行创建对象&am…

typescript语法高亮插件_vscode常用插件

插件介绍HTML Snippets > 初级H5代码片段及提示HTML CSS Support > 初级H5代码片段及提示Debugger for Chrome > 让 vscode 映射 chrome 的 debug功能,静态页面都可以用 vscode 来打断点调试jQuery Code Snippets > jquery 重度患者必须品,废…

cfree运行程序错误_C/C++程序调试和内存检测

程序出现错误很正常,一个优秀的程序员必须学会调试,发现错误并改正。减少程序错误最有效的方法是:在敲代码之前,多花点时间思考,如何构造程序,数据结构和算法,尽量把细节提前写下来,…

java中System类、String Builder类简介

System类: System类为系统类,此包位于java.lang.System下,可以获得与系统相关的信息或系统操作,如: public class SystemClass{public static void main(String[] args){// 1.System下有许多静态的方法,其…

session的removeattribute移除一个不存在的属性会怎么用_公认峡谷机制最完美,对线几乎无解,夏侯惇高端局为何火不起来?...

Hello各位亲爱的小伙伴们,大家好,我是沐辰。在王者荣耀中始终有这么一个说法:“夏侯惇是王者峡谷机制最完美的英雄”,当然这个可不是沐辰胡编乱造,而是策划在数年前就曾公开发表过的看法。从机制上来,夏侯惇…

python图标的演变_python day 22 CSS拾遗之箭头,目录,图标

lanxing4. CSS拾遗之箭头画法.up { border-top: 30px solid green; border-right: 30px solid transparent; border-bottom: 30px solid transparent; border-left: 30px solid transparent; display: inline-block; } .down { border-top: 30px solid transparent; border-rig…

PHP中生成UUID

一、什么是UUID 简单的说UUID就是一串全球唯一的(16进制)数字串。 UUID的全拼为“Universally Unique Identifier”,可以译为“通用唯一识别码”。UUID由开源软件基金会 (Open Software Foundation, OSF) 定义,是分布式计算环境 (Distributed Computing …

java中包装类介绍

包装类: 基本数据类型使用起来非常方便,但是没有对应的方法来操作这些基本类型的数据,我们只有通过一个类把基本类型的数据封装起来,并在类中定义一些方法,这个类就叫做包装类。 包装类对应基本数据类型中的四类八种…

岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...

工作多年,被面试过很多次,也面试过很多人,其中有一次印象最深刻,这次我不是主面试官,经理要面试一个候选人,他就拉上了我,作为陪衬,用经理的话说就是撑撑场面, 所以问题的…

python新手入门课_Python基础视频12集入门课程

视频笔记:├─1简介与实验环境配置9│ Python基础.pptx│ Python简介.pptx│ 实验环境配置2-1.pdf│ 2.1简介与实验环境配置.mp4│ 请简述 Python 语言与 C 语言、 Java 语言的区别.txt│ 请简述使用 conda 管理 python 环境有哪些优势.txt│├─2编程模式与注释│ 你所认为的 …

java中Collection集合、Iterator迭代器接口、for each循环遍历集合或对象

Collection集合: 概念:集合是java中提供一种存储多个数据的容器;数组也是存储数据的容器,集合和数组的区别就是集合的长度可以改变,而数组的长度不可以改变;集合可以存储多种类型的对象数据,而数组只能存储…

工业镜头选型计算公式_变压器分接开关选型指南

如何选择变压器适用的分接开关型号?选型中又有哪些值得注意的事项呢?小编特别整理提炼了分接开关选型指南,让我们一起来看一下。分接开关的产品型号示例如下:型号中的各项参数和规格可通过以下步骤计算确定:1、确定调压…

icmp端口_pingtunnel搭建icmp隧道

说明pingtunnel可以将udp、tcp、sock5流量伪装成icmp传输,地址:https://github.com/esrrhs/pingtunnel/,详细说明和用法可参考官方说明。示例图客户端运行在攻击机,服务端运行在受害机。情况如下:通过pingtunnel搭建一…

node中使用短信验证功能(阿里云为例)

一、选择短信平台 短信平台有很多,这里我选择阿里云,详细步骤如下: 进入短信控制台,对要发送的短信格式进行配置,如果没有签名,需要申请签名后操作(注意:需要自己已有阿里云账号且实…

mysql 5.5数据库主从配置步骤详解

上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5.5.33.tar.gz 环境准备: 服务器a:192.168.10.151 (主) 服务器b:192.168.10.152 (从)1.安装前准备wget http:/…

如何画圆柱_什么是最速降线?如何来验证一下呢?这里用SolidWorks来试一试

一个仅受重力的物体,从一个点出发,沿着一条没有摩擦的斜坡滚动到另外一个点。肯定有一个斜坡使物体运动的时间最短。这个斜坡所在的曲线就是“最速降线”。关于这个最速降线是怎么计算出来,我并不知道,但是他有一个结论&#xff0…

python读取配置文件使用_python 使用 ConfigParser 读取和修改INI配置文件

在程序开发中,使用独立的配置文件来配置一些参数常见且方便,配置文件的解析或修改并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,ConfigParser模块解析的配置文…

根据用户id查询菜单列表(菜单权限问题)

根据用户id查询菜单列表(菜单权限问题): 最高级用户菜单效果图: 较低级别用户菜单效果图: SQL语句分析图: 根据用户id查询对应菜单(权限)SQL语句: SELECT * FROM us…