InversifyJS – 注射不是一个function

我正在尝试使用InversifyJS来build立一个NodeJS / TypeScript项目,但是我有点麻烦。 过去几天我一直在看这个,不知道这个问题。 一切都build立正确,但是当我尝试启动节点服务器时,我得到以下错误:

TypeError: inversify_1.injectable is not a function 

我正在运行NodeJS v6.2.2(Windows 10 x64),并安装了TypeScript 1.8。 我已经尝试使用VS2015和gulpbuild设。 下面是我尝试过的最小的例子,经历了同样的错误。 我看不出有什么问题,但是我必须明白一些事情。 (懒散的代码,它应该仍然工作。)

server.ts:

 /// <reference path="./node_modules/reflect-metadata/reflect-metadata.d.ts" /> /// <reference path="./node_modules/inversify-dts/inversify/inversify.d.ts" /> /// <reference path="./typings/index.d.ts" /> import "reflect-metadata" import { Application } from "./app/app" import { ITest, TestClass } from "./app/testclass" import { Kernel, injectable, inject } from "inversify" var kernel = new Kernel(); kernel.bind<ITest>("ITest").to(TestClass); kernel.bind<Application>(Application).to(Application); var app = kernel.get<Application>(Application); app.initialize(); 

应用程序/ app.ts

 /// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> /// <reference path="../typings/index.d.ts" /> import * as Hapi from "hapi"; import { inject, injectable } from "inversify" import { ITest } from "../app/testclass" @injectable() export class Application { private testClass: ITest; constructor( @inject("ITest") test: ITest) { this.testClass = test; }; initialize() { var server = new Hapi.Server({ connections: { router: { isCaseSensitive: false, stripTrailingSlash: true } } }); server.connection({ port: '3000', host: 'localhost' }); server.route({ method: 'GET', path: '/', handler: (request: Hapi.Request, reply: Hapi.IReply) => { var str = this.testClass.test(); reply(str); } }); server.start(function () { console.log('Server running at:', server.info.uri); }); } } 

应用程序/ testclass.ts

 /// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> import { injectable } from "inversify" export interface ITest { test(): string; } @injectable() export class TestClass implements ITest { test(): string { return "testing"; } } 

tsconfig.json

 { "files": [ "server.ts", "app/app.ts", "app/testclass.ts" ], "compilerOptions": { "module": "commonjs", "noImplicitAny": true, "target": "es6", "experimentalDecorators": true, "emitDecoratorMetadata": true, "outDir": "../release/" } } 

来自节点的完整错误输出:

 C:\Projects\inversifytest\release\app\app.js:50 inversify_1.injectable(), ^ TypeError: inversify_1.injectable is not a function at Object.<anonymous> (C:\Projects\inversifytest\release\app\app.js:50:17) at Module._compile (module.js:541:32) at Object.Module._extensions..js (module.js:550:10) at Module.load (module.js:458:32) at tryModuleLoad (module.js:417:12) at Function.Module._load (module.js:409:3) at Module.require (module.js:468:17) at require (internal/module.js:20:19) at Object.<anonymous> (C:\Projects\inversifytest\release\server.js:6:15) at Module._compile (module.js:541:32) 

我明白了 – 我怀疑这是一个愚蠢的错误。 我安装了InversifyJS的错误版本。 装饰只适用于新版本2.x和npm已安装1.3.1(因为我没有明确指定一个版本)。