问题标签 [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.
typescript - 类实例之前的打字稿装饰器
我正在玩 Typescript 装饰器,当我实例化一个类时,一切都很好。使用以下代码,我的 Class-decorator 被调用:
import { MyClass } from "./MyClass";
const myClass = new MyClass();
但是当我不像上面的示例那样显式地实例化类时,不会调用任何装饰器。例如,这个模块:https ://github.com/xrobert35/es-mapping-ts就依赖这样的结构将所有类保存在一个存储中并生成一个映射。我在没有先实例化类并生成映射的情况下尝试了它,但它也不起作用。在实例化放置装饰器的类之前,是否必须设置任何 Webpack 或 Typescript 配置才能执行装饰器?在我的知识状态和一些在线教程中,定义了在定义类时调用类装饰器,而不是在实例化类时调用。干杯!
typescript - 如何获取函数参数类型
我可以使用ReflectAPI轻松获取方法的参数类型:
但是,当我尝试获取函数的参数类型时,它总是返回未定义。我尝试过使用这些示例函数:
而且我还读到 TypeScript 仅在您装饰类和方法时才发出元数据。那么,如何获取函数的元数据呢?
typescript - Typescript - 如何从类装饰器中使用装饰器获取所有类属性
我想要一个类装饰器,它获取具有某个装饰器的所有属性的列表,然后修改该类以添加一些额外的属性。例如:
在此示例中,我想使用PropertyThing
装饰器检查类的所有属性,然后修改该类以添加某些属性。这可能吗?
typescript - 打字稿:如何在类装饰器中获取有关公共字段的元数据类型信息
我正在使用反射元数据库和 Typescript 装饰器。
例如,我有这个类(真正的会有更多的字段):
装饰器也很合成,但在实际代码中它最终会这样做:
现在它工作正常,但我想减少样板。所以我想使用一个装饰器并在构造函数中声明所有字段,例如:
装饰器应该遍历所有公共字段并做同样的工作FieldTyping
——从反射中获取实际类型。所以我想要两件事:
- 从类中获取所有密钥。(因为我只需要
string
名字) target
为Reflect.getMetadata
. _
但是target
在类装饰器中是一个构造函数,而不是Object
. 我能够通过一些“hack”访问类密钥:
所以我用undefined
值创建类实例并在不知道它的实际类型的情况下获取它的键(公共字段)。但我有问题target
。我试图在这种情况下使用任何变体而不是实际target
参数:
target.prototype
为了从中获取Object
构造函数;obj
作为 this 的一个新实例Object
;- 就像
Message
一种类型
但是它们都不起作用,在所有情况下我都得到了“未定义”类型。从我的实验来看,即使没有装饰器和简单的参数,似乎在任何其他地方Reflect.getMetadata
也不起作用:
显然它只适用于现场target
装饰器,至少对我来说。我在这个主题中挖掘了整个 SO,但没有找到任何适合我特定目的的解决方案。
所以请告诉这是否可能或我错过了什么。
注意:
- 我知道使用正则表达式绝对有可能,但我不想要这种丑陋的解决方案。
- 它是客户端代码,因此我无法访问文件系统并解析源以获取ts-morph类型,例如(或者我又错过了一些东西)
- 我确实有
"emitDecoratorMetadata": true
_tsconfig.json
- 我的堆栈只是 NPM 和 Parcel 作为捆绑器。在本地环境中与 Parcel 开发服务器一起使用,在“生产”中与 Harp 一起使用(在 Heroku 上)。
typescript - 为什么将函数传递给元数据时“this”未定义以及如何修复它?
我想在 Typescript 装饰器和reflect-metadata的帮助下创建一个抽象。但是当我调用传递给元数据的函数时,this
它是未定义的:
上面代码片段的输出是
为什么this
未定义,我该如何解决?
您可以通过克隆此示例 repo 并运行来自己尝试
nuxt.js - 如何在 Nuxt 初始化状态存储之前执行代码?
我正在尝试加载reflect-metadata
polyfill,以便可以将 Inversify 与 Nuxt 应用程序一起使用,但我无法尽早加载它以能够在 Vuex 模块中使用装饰器。(我尝试在插件中执行此操作,但插件似乎是在初始化过程之后加载的。)
是否可以在Nuxt 加载存储模块或其他任何内容之前挂钩到初始化过程?
javascript - 如何在 Typescript 中检测循环依赖
下面的代码存在循环依赖问题。A -> B -> A
可重现的问题:
/a.ts
/b.ts
/test.ts
/index.ts
预期产出
实际输出
问题:如何达到预期的输出
目标是检测循环依赖。但我们也想知道究竟是什么参数导致了循环依赖。
如果 reflect-metadata 只输出 undefined,则无法知道是哪个参数引发了循环依赖。
我已经检查了在 TypeScript 中检测循环依赖,但这没有帮助
node.js - typeORM: "message": "\"postgres\" 数据库不支持 \"..." 中的数据类型 \"Object\"。"
给定以下实体定义:
出现以下错误:
在查看构建时,我看到 TS 发出的元数据将其作为对象处理:
我究竟做错了什么?
javascript - 无法定义或检索方法上的元数据
我正在尝试将元数据键值对附加到对象键(TS 类中的方法),但实际上并未对元素执行任何操作。
代码中调用部分的片段
控制器遍历方法元数据
“调试信息
typescript - 通过省略属性继承打字稿中的类
我试图在 TypeScript 中继承一个类,忽略父类的一些属性。
这是我的代码:
使用此代码,验证方法返回带有 id 参数的错误。
这是我想要的代码:
使用此代码,验证方法不应返回带有 id 参数的错误。
有什么想法可以实现这一目标吗?
谢谢你!
PD:我的想法是基于 NestJS 提供的这些功能,但我无法理解它们是如何工作的:https ://docs.nestjs.com/graphql/mapped-types