nodejs中的Typescript Reflect-MetaData

时间:2016-01-22 16:32:36

标签: node.js typescript reflect-metadata

有没有人有任何关于如何在nodejs中使用reflect-metadata的例子?我也在使用atom-typescript。我通过npm下载使用它,但我不断收到随机错误。我看到Reflect是一个空白对象。只是寻找一个如何将其合并到模块或节点项目中的示例。

2 个答案:

答案 0 :(得分:3)

当我遇到同样的问题并且没有任何效果时,我在node_modules中打开了Reflect.ts文件。最后,你可以看到它在全球范围内挂钩反射。

// hook global Reflect
(function(__global: any) {
    if (typeof __global.Reflect !== "undefined") {
        if (__global.Reflect !== Reflect) {
            for (var p in Reflect) {
                __global.Reflect[p] = (<any>Reflect)[p];
            }
        }
    }
    else {
        __global.Reflect = Reflect;
    }
})(
    typeof window !== "undefined" ? window :
        typeof WorkerGlobalScope !== "undefined" ? self :
            typeof global !== "undefined" ? global :
                Function("return this;")());

因此,我从所有其他文件中删除了需要reflect-metadata,并将其移动到主文件。

require('reflect-metadata/Reflect');

现在,我可以使用以下语法在所有模块中使用它(不需要reflect-metadata),

(<any>global).Reflect.getMetadata("design:type", target, key); // In Typescript

编辑: 我们还可以从node_modules引用reflect-metadata.d.ts文件,然后直接使用API​​。

/// <reference path="../../node_modules/reflect-metadata/reflect-metadata.d.ts" />

Reflect.getMetadata("design:type", target, propertyKey);

答案 1 :(得分:1)

在TypeScript@2.0+中,您可以像这样使用它:

npm i -S reflect-metadata
npm i -D @types/reflect-metadata

// your.ts
import 'reflect-metadata'
Reflect.getMetadata(...)
Reflect.metadata(...)