问题标签 [reflect-metadata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
883 浏览

typescript - 类实例之前的打字稿装饰器

我正在玩 Typescript 装饰器,当我实例化一个类时,一切都很好。使用以下代码,我的 Class-decorator 被调用: import { MyClass } from "./MyClass"; const myClass = new MyClass(); 但是当我不像上面的示例那样显式地实例化类时,不会调用任何装饰器。例如,这个模块:https ://github.com/xrobert35/es-mapping-ts就依赖这样的结构将所有类保存在一个存储中并生成一个映射。我在没有先实例化类并生成映射的情况下尝试了它,但它也不起作用。在实例化放置装饰器的类之前,是否必须设置任何 Webpack 或 Typescript 配置才能执行装饰器?在我的知识状态和一些在线教程中,定义了在定义类时调用类装饰器,而不是在实例化类时调用。干杯!

0 投票
1 回答
493 浏览

typescript - 如何获取函数参数类型

我可以使用ReflectAPI轻松获取方法的参数类型:

但是,当我尝试获取函数的参数类型时,它总是返回未定义。我尝试过使用这些示例函数:

而且我还读到 TypeScript 仅在您装饰类和方法时才发出元数据。那么,如何获取函数的元数据呢?

0 投票
0 回答
162 浏览

typescript - Typescript - 如何从类装饰器中使用装饰器获取所有类属性

我想要一个类装饰器,它获取具有某个装饰器的所有属性的列表,然后修改该类以添加一些额外的属性。例如:

在此示例中,我想使用PropertyThing装饰器检查类的所有属性,然后修改该类以添加某些属性。这可能吗?

0 投票
0 回答
1449 浏览

typescript - 打字稿:如何在类装饰器中获取有关公共字段的元数据类型信息

我正在使用反射元数据库和 Typescript 装饰器。

例如,我有这个类(真正的会有更多的字段):

装饰器也很合成,但在实际代码中它最终会这样做:

现在它工作正常,但我想减少样板。所以我想使用一个装饰器并在构造函数中声明所有字段,例如:

装饰器应该遍历所有公共字段并做同样的工作FieldTyping——从反射中获取实际类型。所以我想要两件事:

  1. 从类中获取所有密钥。(因为我只需要string名字)
  2. targetReflect.getMetadata. _

但是target在类装饰器中是一个构造函数,而不是Object. 我能够通过一些“hack”访问类密钥:

所以我用undefined值创建类实例并在不知道它的实际类型的情况下获取它的键(公共字段)。但我有问题target。我试图在这种情况下使用任何变体而不是实际target参数:

  • target.prototype为了从中获取Object构造函数;
  • obj作为 this 的一个新实例Object
  • 就像Message一种类型

但是它们都不起作用,在所有情况下我都得到了“未定义”类型。从我的实验来看,即使没有装饰器和简单的参数,似乎在任何其他地方Reflect.getMetadata也不起作用:

显然它只适用现场target装饰器,至少对我来说。我在这个主题中挖掘了整个 SO,但没有找到任何适合我特定目的的解决方案。

所以请告诉这是否可能或我错过了什么。

注意:

  1. 我知道使用正则表达式绝对有可能,但我不想要这种丑陋的解决方案。
  2. 它是客户端代码,因此我无法访问文件系统并解析源以获取ts-morph类型,例如(或者我又错过了一些东西)
  3. 确实"emitDecoratorMetadata": true_tsconfig.json
  4. 我的堆栈只是 NPM 和 Parcel 作为捆绑器。在本地环境中与 Parcel 开发服务器一起使用,在“生产”中与 Harp 一起使用(在 Heroku 上)。
0 投票
2 回答
273 浏览

typescript - 为什么将函数传递给元数据时“this”未定义以及如何修复它?

我想在 Typescript 装饰器和reflect-metadata的帮助下创建一个抽象。但是当我调用传递给元数据的函数时,this它是未定义的:

上面代码片段的输出是

为什么this未定义,我该如何解决?


您可以通过克隆示例 repo 并运行来自己尝试

0 投票
0 回答
112 浏览

nuxt.js - 如何在 Nuxt 初始化状态存储之前执行代码?

我正在尝试加载reflect-metadatapolyfill,以便可以将 Inversify 与 Nuxt 应用程序一起使用,但我无法尽早加载它以能够在 Vuex 模块中使用装饰器。(我尝试在插件中执行此操作,但插件似乎是在初始化过程之后加载的。)

是否可以在Nuxt 加载存储模块或其他任何内容之前挂钩到初始化过程?

0 投票
0 回答
804 浏览

javascript - 如何在 Typescript 中检测循环依赖

下面的代码存在循环依赖问题。A -> B -> A

可重现的问题:

/a.ts

/b.ts

/test.ts

/index.ts

预期产出

实际输出

问题:如何达到预期的输出

目标是检测循环依赖。但我们也想知道究竟是什么参数导致了循环依赖。

如果 reflect-metadata 只输出 undefined,则无法知道是哪个参数引发了循环依赖。

我已经检查了在 TypeScript 中检测循环依赖,但这没有帮助

0 投票
2 回答
4455 浏览

node.js - typeORM: "message": "\"postgres\" 数据库不支持 \"..." 中的数据类型 \"Object\"。"

给定以下实体定义:

出现以下错误:

在查看构建时,我看到 TS 发出的元数据将其作为对象处理:

我究竟做错了什么?

0 投票
1 回答
28 浏览

javascript - 无法定义或检索方法上的元数据

我正在尝试将元数据键值对附加到对象键(TS 类中的方法),但实际上并未对元素执行任何操作。

代码中调用部分的片段

控制器遍历方法元数据

“调试信息

0 投票
0 回答
80 浏览

typescript - 通过省略属性继承打字稿中的类

我试图在 TypeScript 中继承一个类,忽略父类的一些属性。

这是我的代码:

使用此代码,验证方法返回带有 id 参数的错误。

这是我想要的代码:

使用此代码,验证方法不应返回带有 id 参数的错误。

有什么想法可以实现这一目标吗?

谢谢你!

PD:我的想法是基于 NestJS 提供的这些功能,但我无法理解它们是如何工作的:https ://docs.nestjs.com/graphql/mapped-types