问题标签 [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 回答
1674 浏览

typescript - reflect-metadata Reflect.getMetadata() 方法不返回所提供对象原型链上的元数据

我正在使用反射元数据 0.1.2。我有一个父类作为“MyCustom”。

我的“Home”组件类扩展了这个“MyCustom”类。

我的意图是使用以下方法调用获取扩展“MyCustom”类的所有类的元数据。

对 Reflect.getMetadata() 方法的评论说,

获取目标对象或其原​​型链上提供的元数据键的元数据值。

然而我什么也得不到。如果我将@Component 添加到“MyCustom”类,如下所示,

我得到一个结果,即“MyCustom”上的注释。

为什么我没有得到子类的注释?非常感谢任何帮助。

0 投票
2 回答
1112 浏览

javascript - 在浏览器中使用没有 Reflect.js 和 zone.js 的 Angular 2

我正在尝试在现有的打字稿项目中使用 Angular,我正在使用 browserify 来捆绑实际的应用程序。

现在,我基本上只是从设置教程中重建了应用程序并设法让它全部工作:

角度/应用程序/app.component.ts

角度/应用程序/app.module.ts

角度/应用程序/main.ts

最后是我的Bundle-facade,它通过browserify编译成一个独立的bundle:

我的应用程序.ts

唯一让我烦恼的是我必须添加

对于使用我捆绑的 Angular 模块来消除由于我的 Angular 应用程序中的类装饰器引起的错误的每个 html 页面:

使用类装饰器时需要未捕获的反射元数据填充程序

有没有办法通过某种导入语句摆脱这个或使这两个模块成为我的捆绑包的一部分?

或者是否有任何其他最佳实践来处理这些垫片正在解决的问题?

0 投票
1 回答
8039 浏览

angular - 如果使用 Angular 2 Stack,Typescript Reflect.getMetadata('design:type'..) 返回 Object 而不是 Date

以下代码示例按预期工作并打印出“[Function: Date]”

如果我在 Angular 2 项目中放置相同的代码,则会返回“function Object() { [native code] }”。

我为此准备了一个 Plunker: https ://plnkr.co/edit/DhXT89U0q5fCOWlCrx6w?p=preview

Reflect.getMetadata('design:type' ...) 仍然适用于自定义类和其他内置类。我只能用 Date 产生这个问题。

我究竟做错了什么?

0 投票
0 回答
216 浏览

javascript - 为什么 Reflect 对象没有 `defineMetadata` 和 `getOwnMetadata` 方法

我正在查看这个反射元数据shim,它显示了Reflect对象上可用的方法,例如Reflect.defineMetadataReflect.getOwnMetadata。Reflect 对象的MDN 页面没有列出这些方法。那是两个不同的Reflect对象吗?

0 投票
1 回答
163 浏览

typescript - 模块问题中的 TypeScript 元数据

我有一个在 TypeScript 中使用元数据和装饰器的框架,所以我知道它正在工作。

但是,今天我刚刚发现了一个奇怪的基本案例,我无法弄清楚为什么。

它可以在 TS@2.1.5、@2.1.6 和 @2.2.0-dev.20170214 中重现

该问题可以在https://github.com/unional/some-issues/tree/ts-meta-import中进行演示

情况总结

上面的代码工作正常,但是如果我尝试访问Foo不同的文件并做同样的事情,它就不起作用:

真的不应该这样......

更新:在我的框架中,我正在使用aurelia-metadata它似乎在这种情况下工作。但问题仍然存在,为什么这种“简单”的场景不适用reflect-metadata

0 投票
1 回答
1566 浏览

angular - 在角度应用程序中引用反射元数据或等价物的正确方法

在这个plunker 中,我试图用自定义注释装饰 MyModel 上的属性。使用自定义装饰器取消注释属性或取消注释import 'reflect-metadata';并且使用内联装饰器生成的属性:

我可以只取消注释内联装饰器,但在编辑器中,import 'reflect-metadata';您不会收到关于 metadata() 不是 Reflect 属性的代码自动完成和 tsc 错误。

以角度使用反射 API 的正确方法是什么?

编辑:
使用一个新的@angular/cli 生成的应用程序import 'core-js/es7/reflect';,但如果你尝试任何 Reflect.metadata() 组合,pollyfills.ts你仍然会得到Property 'metadata' does not exist on type 'typeof Reflect'.

Edit2:我似乎通过替换import 'core-js/es7/reflect';import 'reflect-metadata';in来在 angular cli 中工作,pollyfills.ts但我不知道它们是否是一对一的替代品,或者是否有后果。我不清楚这里的答案。Angular2 使用 npm reflect-metadata 或 core-js/es7/reflect

0 投票
1 回答
330 浏览

javascript - 在哪里可以找到反射元数据中使用的 metadataKey 值

我正在使用打字稿和 Angular (2.4.7)

reflect-metadata 指的是神奇的字符串,我在哪里可以找到这些是什么,它们是在哪里定义的?例如“设计:类型”

0 投票
3 回答
2444 浏览

javascript - 如何使用 Rollup JS 捆绑 polyfills 和外部库?

这是我第一个使用 Angular 2 的应用程序。

我们运行 aot 和 rollup 来生成一个包。但是我们必须始终将 polyfills(shim、reflect-metadata 和 zone.js)添加到带有scriptHTML 元素的 index.html 中。

是否可以将此 polyfill 添加到包中?

另一个问题:如何将外部 JS 库添加到包中。实际上,就像 polyfill 一样,我们必须将它们添加到 index.html

0 投票
1 回答
2577 浏览

angular - Typescript Reflect.getMetadata 设计:类型返回对象而不是没有角度测试台的日期

我想首先说它不是Typescript Reflect.getMetadata('design:type'..) return Object 而不是 Date 如果使用 Angular 2 Stack的副本但相似。

以下代码:

如果运行ts-mocha test.ts输出

而如果运行karma start它被设置为angular2项目输出的一部分

为什么会这样以及如何使测试结果保持一致?

https://gitlab.com/sQu1rr/test-ts-date-reflect/tree/master(karma 配置是从 angular2 项目中提取的,没有清理)

0 投票
1 回答
489 浏览

typescript - 在 typescript 中定义一个装饰器守卫

想象一下,您有实现某个装饰器的类:

如果你想要一个变量来保存其中一些类的类本身,它会有什么类型?

但是你是否已经在想:当你有很多类时枚举类不是一个好习惯,当你不知道它们时它甚至不是一个选择。

所以剩下的选项是(编辑:因为打字稿不允许 typeof 泛型)

但这也不好!


我想为 this 定义一个类型保护,所以我可以替换any一个可以实际检查对象是否具有 @Component 装饰器的类型,因此可以像这样声明它:


只是一个想法

我认为最好的方法是为它定义一个类型,并在那里定义守卫。但这是不可能的


希望看到你的想法来解决这个问题。谢谢!