如何在Aurelia CLI项目中引用和导入反射元数据?
问题描述:
我想使用TypeScript将来自NPM的反射元数据包集成到Aurelia CLI项目中,但我找不到有关如何执行此操作的任何指南。如何在Aurelia CLI项目中引用和导入反射元数据?
是否有一种“标准”方式来整合这个polyfill,它应该如何在TypeScript中使用?
答
Aurelia附带的现有Reflect填充材料不够吗? https://github.com/aurelia/polyfills/blob/master/src/reflect.js
如果不是,则将reflect-metadata
添加到Aurelia CLI项目相当简单。
npm install --save reflect-metadata
- 添加
"reflect-metadata"
到vendor-bundle
配置的dependencies
节aurelia.json
- 添加
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);
}
}
它看上去像什么,当我跑它:
Aurelia酒店polyfi我似乎没有提供defineMetadata或getMetadata的类型,我尝试'导入“aurelia-polyfills”;但它不起作用,方法没有定义。但是,我遵循了你的指南,它似乎完美地工作 - 我得到整个Reflect API的类型,并且它在运行时按预期工作,所以非常感谢。 – Sam
您可能想要在polyfills回购中提出问题,要求我们为polyfills创建类型。 –