#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';
Должен быть первый импорт, чтобы заставить контроллеры маршрутизации работать