如何在Aurelia CLI项目中引用和导入reflect-metadata?

时间:2017-07-17 08:03:07

标签: typescript aurelia aurelia-cli aurelia-framework

我想使用TypeScript将NPM中的reflect-metadata包集成到Aurelia CLI项目中,但我找不到任何有关如何执行此操作的指南。

是否存在集成此polyfill的“标准”方法,以及如何在TypeScript中使用它?

1 个答案:

答案 0 :(得分:2)

Aurelia附带的现有Reflect polyfill是不够的? https://github.com/aurelia/polyfills/blob/master/src/reflect.js

如果没有,将reflect-metadata添加到Aurelia CLI项目中相当简单。

  1. npm install --save reflect-metadata
  2. "reflect-metadata"添加到dependencies
  3. vendor-bundle配置的aurelia.json部分
  4. import "reflect-metadata";添加到需要使用API​​的任何TypeScript文件中。
  5. 至于在TypeScript中使用它,我请查看此页面:https://www.typescriptlang.org/docs/handbook/decorators.html

    我将该页面中的一个示例复制到Aurelia应用程序中,一切看起来都很好:

    import "reflect-metadata";
    
    export class App {
      message : string;
    
      constructor() {
        let greeter = new Greeter("Ashley");
    
        this.message = greeter.greet();
      }
    }
    
    const formatMetadataKey = Symbol("format");
    
    function format(formatString: string) {
        return Reflect.metadata(formatMetadataKey, formatString);
    }
    
    function getFormat(target: any, propertyKey: string) {
        return Reflect.getMetadata(formatMetadataKey, target, propertyKey);
    }
    
    class Greeter {
        @format("Hello, %s")
        greeting: string;
    
        constructor(message: string) {
            this.greeting = message;
        }
        greet() {
            let formatString = getFormat(this, "greeting");
            return formatString.replace("%s", this.greeting);
        }
    }
    

    我跑步时的样子:

    enter image description here