Typescript:在编译时在其自己的属性中获取类名

2023-11-25

例如,如果我们有一个这样的类:

class MyClass {
  className: string;
}

是否可以在编译时将“MyClass”分配给 className 属性?

编辑:已经尝试过 this.constructor.name。然而,后者对缩小代码没有帮助。因此检查当 typescript 代码编译为 JS 时是否有办法捕获类名。我正在使用 Angular-CLI。


/补充答案

由于即使在丑化之后您也需要原始类的实际名称,因此您将需要查看您的构建过程。

你说你使用 angular-cli,它在幕后使用 UglifyJS 进行丑化。 UglifyJS 支持保留原始类名的标志,甚至支持应忽略的类名白名单。具体来说就是mangler您感兴趣的部分。官方网站甚至提到它会破坏代码Function.name.

您可以完全禁用重整,也可以专门禁用重整类名(或将某些类名列入白名单)。我不认为这对于 angular-cli 是可能的(在 webpack 中你可以),但是你正在寻找的标志是keep-classnames or keep_fnames。然而,Angular-CLI 团队表示多次它不支持这种粒度级别的配置。

那么你似乎还有两个选择:

  1. 切换到完整的 webpack (ng eject可以帮助你)
  2. 硬编码类名

Like so:

class MyClass {
  className = 'MyClass';
}

什么是 ng 弹出?引用dave11mj 的评论:

ng eject只是意味着你需要使用 webpack 做一些比 cli 为 ng build 和 ngserve 这样的命令提供的更高级或自定义的事情。所以它会根据 cli 使用的配置生成一个 webpack.config.js ,以便然后您可以进一步自定义它。

因此,只要 angular-cli 本身不支持 UglifyJS 配置,听起来它肯定是为您的情况而设计的。


/原始答案(在禁用 UglifyJs mangling 的情况下仍然有用)

class MyClass {
  className = this.constructor.name;
}

const instance = new MyClass();
console.info(instance.className); // yields "MyClass"

如果您使用 TypeScript >= 2.1,则类型string由编译器推断。

jsFiddle

如果你有一个构造函数,你也可以像这样定义它并完全省略显式字段(根据喜好,两者的工作原理相同):

class MyClass {
  constructor(public className = this.constructor.name) {
    (..)
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript:在编译时在其自己的属性中获取类名 的相关文章

随机推荐

  • LinQ 如何将 1 这样的整数更改为字符串 001

    我的数据库中有一个包含四列的表 string year string weeknr int number 在其他表中 我将这些列组合成yywwnnn作为字符串 数字列是标识列 现在我想从要与上述表连接的表中检索一些记录 就像是 from R
  • 如何在 C++ 中使用 python 库?

    我想使用nltkC 中的库 我可以使用胶水语言 机制来做到这一点吗 原因 我已经有一段时间没有用 C 进行任何认真的编程了 并且想同时修改 NLP 概念 Thanks 尽管从 python 调用 c libs 更为正常 您可以通过基本调用
  • 如何使用python从mp3文件中提取原始数据?

    我有关于使用 Python 进行音频数据分析的作业 我想知道是否有任何好的模块可供我用来从 mp3 文件中提取原始数据 我的意思是原始数据 而不是元数据 id3 标签 我知道如何使用wave要处理的模块 wav文件 我可以readframe
  • 带点的 DataTable 列名称为何不适合 WPF 的 DataGrid 控件?

    运行这个 你会感到困惑
  • 使用 PyQt4 进行核心转储

    我从 PyQt4 开始 在最简单的示例中使用 QGraphicsScene View 时面临核心转储 usr bin python import sys from PyQt4 QtCore import from PyQt4 QtGui i
  • Plotly Dash 表回调

    我试图让滑块 用户输入和表格之间的依赖关系发挥作用 我尝试输出数据并使用回调来更新它 建议我只在回调中创建表并使用 Div 定义其在显示中的位置 其他信息 表是使用 dash table 库从 pandas DataFrame 创建的 数据
  • $?VAR 在 csh 中意味着什么?

    我遇到过用 csh 编写的这段代码 if LM LICENSE FILE then setenv LM LICENSE FILE LmLicense else switch LM LICENSE FILE case LmLicense br
  • 通过 html 按钮更改变量

    我正在学习 javascript 我决定创建简单的石头剪刀布游戏 我想让它可以通过按钮控制 所以我用html做了这个 div div
  • 如何使用 UIWebView 加载包含哈希片段“#”的 NSURL?

    给定一个本地 URL 地址 例如 index html 现在我需要使用UIWebView将其加载到 iPad 中 我按照以下步骤操作 创建 NSURL NSURL url NSURL fileURLWithPath http mysite
  • 如何使用 xQuery 对转义的 XML 进行取消编码

    我在 xQuery 中有一个类型为 xs string 的变量 其值为编码的 HTML 片段 twitter 推文的内容 它看起来像这样 今日头条美联社来源 b 奥巴马 b 挑选 司法职位撤回 新闻 休息 世界 http shar es m
  • Swift:如何从我的应用程序到 iBooks 打开本地 pdf

    我之前是用objective c的 下面的 Objective C 代码运行良好 in h property retain UIDocumentInteractionController docController 并以 m 为单位 NSS
  • 滚动到 ScrollView 中 TableLayout 的最后一行

    我想要一个动态表 在 ScrollView 中使用 TableLayout 随着时间的推移 由于用户交互而添加行 这工作正常 但是当我想使用滚动到表格末尾时fullScroll 它总是省略最后一行 也就是说 它会滚动 以便最后一个之前的一个
  • Powershell - 通过删除最后几个字符来重命名文件名

    我想删除多个文件名的最后 11 个字符 例如 我有这些文件名 ABCDE 2015 10 20 HIJKL 2015 10 20 MNOPQ 2015 10 20 RSTUV 2015 10 20 想将它们重命名为 ABCDE HIJKL
  • 将 linq 中的字符串转换为大数据库上的实体

    我想将 linq toEntity 中的字符串转换为 int 但 Convert ToInt32 和 int Parse 无法转换为 sql 我的数据库很大 无法将它们全部存入内存 超过 60k 记录并变得更大 我的查询是这样的 int m
  • 在 Django 网站中嵌入 Bokeh 图会导致空白页面且没有错误消息

    我正在尝试将 Bokeh 图嵌入到具有上传按钮的 Django 网站中 我正在使用给出的例子here作为起点 然后添加有关嵌入的说明here 这是我的问题的后续here因为我现在有一个新问题 当我转到与其关联的网址时 该图不会显示 但没有错
  • 如何在激活器中获取 IEclipseContext

    我在 Eclipse 4 RCP 应用程序中遇到了一个问题 我需要记录一些事件 我需要以某种方式获得对记录器的引用 我知道 如何使用IEclipseContext 但我没有找到如何获得IEclipseContext没有依赖注入 我无法在激活
  • UITableView reloadRowsAtIndexPaths 隐藏行

    我将 UITableView 与静态单元格一起使用 如果我使用reloadData 比一切都好 如果我尝试reloadRowsAtIndexPaths它隐藏行 如果我上下拖动 tableView 更新单元格时 就会出现行 如果您的表格单元格
  • 如何向应用主题添加CardView属性?

    我的问题类似于 如何将 CardView 属性放入样式中 但我需要更深入 我正在使用 AppCompat 主题 我的样式看起来像 style name AppTheme parent Theme AppCompat Light DarkAc
  • 使用C在Linux中获取用户组的正确方法

    我想知道是否有用于 unix 命令组的替代 C 库 groups lists all the group id s of the user 有一个名为 getgroups 的方法 但它返回此方法的用户组 有没有办法使用 C 获取特定用户的组
  • Typescript:在编译时在其自己的属性中获取类名

    例如 如果我们有一个这样的类 class MyClass className string 是否可以在编译时将 MyClass 分配给 className 属性 编辑 已经尝试过 this constructor name 然而 后者对缩小