2016-01-22 322 views
3

有沒有人有任何關於如何在nodejs中使用反射元數據的例子?我也使用原子打字稿。我通過npm使用它下載,但我不斷收到隨機錯誤。我看到反思是一個空白的對象。只是尋找一個如何將其納入模塊或節點項目的例子。nodejs中的Typescript反射元數據

+0

沒有下面提供的答案是正確的答案?你能否就你想要達到的目標添加更多細節,以及爲什麼下面的答案不能滿足你的需求? – eAbi

回答

1

[email protected]+,你可以使用它像這樣:

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

// your.ts 
import 'reflect-metadata' 
Reflect.getMetadata(...) 
Reflect.metadata(...) 
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;")()); 

因此,我從所有其他文件中刪除了需要反射元數據,並將其移至主文件。

require('reflect-metadata/Reflect'); 

現在,我可以用它所有的模塊內(無需反映的元數據)與下面的語法,

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

編輯: 我們還可以引用反映,metadata.d.ts文件來自node_modules,然後直接使用API​​。

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

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

哇,這真的很糟糕。不是你的答案 - 但是,所有的一切es6-import打字稿都是無緣無故的巨大痛苦。沒有人可以使用相同的模式。 –