VisualStudio кодирует неправильную версию Typescript во время выполнения

#node.js #typescript #visual-studio-code #typescript1.8

#node.js #typescript #visual-studio-code #typescript1.8

Вопрос:

Недавно я обновился до VSCode 1.6.1, и он переключился с Typescript 1.8.10 на 2.0.3, из-за чего мой проект перестал работать.

Методы отражения изменились, поэтому теперь Routing-Controllers выдает следующую ошибку при попытке получить атрибуты метода:

 TypeError: Reflect.getMetadata is not a function
   at exports.Body (C:FNFantasyNationStormbringernode_modulesrouting-contr
ollersdecoratorparams.js:155:30)
   at __param (C:FNFantasyNationStormbringerScriptscontrollersUserControl
ler.js:12:37)
   at __decorate (C:FNFantasyNationStormbringerScriptscontrollersUserCont
roller.js:5:110)
   at Object.<anonymous> (C:FNFantasyNationStormbringerScriptscontrollers
UserController.js:56:1)
  

Следуя инструкциям в примечаниях к выпуску, чтобы вернуться к определенной версии в моей рабочей области, я установил старый typescript в рабочей области:

 npm install typescript@1.8.10 
  

При повторном открытии VSCode не спросил меня об используемой версии TS, поэтому я вручную обновил свою рабочую область «settings.json», чтобы указать ее:

 {    
    "files.exclude": {
        "**/*.js.map": true,
        "**/*.js": {"when": "$(basename).ts"}
    },
    "editor.stablePeek": true,
    "typescript.tsdk": "node_modules/typescript/lib"
}
  

Когда я открываю файл «.ts», VSCode показывает правильную версию:

введите описание изображения здесь

Но после перестройки (ctrl shift B) и повторного запуска (F5) я все еще получаю точно такую же ошибку.

Мой tsconfig:

 { 
   "compilerOptions": {
       "target": "es6",
       "module": "commonjs",        
       "noImplicitAny": false,
       "removeComments": true,        
       "emitDecoratorMetadata": true,
       "experimentalDecorators": true,  
       "inlineSourceMap": true,
       "watch": false
   },
   "exclude": [
       "node_modules"
   ]
}
  

И мои настройки запуска:

 {
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/app.js",
            "stopOnEntry": false,
            "args": [],
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--nolazy"
            ],
            "externalConsole": true,
            "sourceMaps": true,
            "outDir": null
        },
        {
            "name": "Attach",
            "type": "node",
            "request": "attach",
            "port": 5959
        }
    ]
}
  

Я что-то упускаю?

Ответ №1:

Ну, это было слияние, которое перепутало код и переместило порядок импорта.

 import 'reflect-metadata';
  

Должен быть первый импорт, чтобы заставить контроллеры маршрутизации работать