2017-07-17 71 views

回答

2

Aurelia附帶的現有Reflect填充材料不夠嗎? https://github.com/aurelia/polyfills/blob/master/src/reflect.js

如果不是,則將reflect-metadata添加到Aurelia CLI項目相當簡單。

  1. npm install --save reflect-metadata
  2. 添加"reflect-metadata"vendor-bundle配置的dependenciesaurelia.json
  3. 添加import "reflect-metadata";到你需要使用API​​的任何打字稿文件。

至於在打字稿使用它,我會檢查這個頁面:https://www.typescriptlang.org/docs/handbook/decorators.html

我在一個奧裏利亞應用程序複製的例子之一從該網頁,一切看起來像它工作得很好:

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

+0

Aurelia酒店polyfi我似乎沒有提供defineMetadata或getMetadata的類型,我嘗試'導入「aurelia-polyfills」;但它不起作用,方法沒有定義。但是,我遵循了你的指南,它似乎完美地工作 - 我得到整個Reflect API的類型,並且它在運行時按預期工作,所以非常感謝。 – Sam

+0

您可能想要在polyfills回購中提出問題,要求我們爲polyfills創建類型。 –

相關問題