【描述】TypeError: Reflect.hasOwnMetadata is not a function。我也认为这是微信开发工具的bug,inversify 和reflect-metadata包在standalone(非小程序环境)的ts项目里可以无错执行。但是在微信开发工具中报错,会报同样错的DI包还有https://www.npmjs.com/package/@abraham/reflection。 【造成的影响】经典的DI框架不能用在小程序中,影响OO开发体验,很难受,还请告知如何解决 【示例代码】 Inversify示例github代码地址:https://github.com/lubancafe/inversify-class-example 主要问题代码段如下(可插入小程序的app.ts中复现题主的错误): import "reflect-metadata"; import { Container, injectable } from "inversify"; @injectable() class Katana { public hit() { return "cut!"; } } @injectable() class Shuriken { public throw() { return "hit!"; } } @injectable() class Ninja implements Ninja { private _katana: Katana; private _shuriken: Shuriken; public constructor(katana: Katana, shuriken: Shuriken) { this._katana = katana; this._shuriken = shuriken; } public fight() { return this._katana.hit(); }; public sneak() { return this._shuriken.throw(); }; } var container = new Container(); container.bind<Ninja>(Ninja).to(Ninja); container.bind<Katana>(Katana).to(Katana); container.bind<Shuriken>(Shuriken).to(Shuriken); const ninja = container.get<Ninja>(Ninja); console.log(ninja.fight()); console.log(ninja.sneak());
TypeScript 开发使用 inversify DI 库报错- 当前 Bug 的表现(可附上截图) [图片] - 预期表现 应该能够正确加载 reflect-metadata npm 包。 - 复现路径 使用 TS 创建小程序项目 npm i inversify reflect-metadata --save 根据 inversify 官方起始文档,编写 DI 相关代码 在小程序开发者工具,菜单点击 工具-》构建 NPM 编译小程序,并查看运行结果 报错。 SOF 上,https://stackoverflow.com/questions/37534890/inversify-js-reflect-hasownmetadata-is-not-a-function,解决的方法是直接引用:import "reflect-metadata", 然鹅,开发工具似乎并没有正确处理? - 提供一个最简复现 Demo
2019-03-27