Я пытаюсь настроить среду отладки для проекта 2019, поэтому я добавил следующий скрипт в мой package.json
"dev:debug": "tsc-watch --onFirstSuccess \"node --inspect -r ts-node/register src/app.ts\"",
При его запуске я получу следующее
> node-api-starter@1.0.0 start:dev D:\p\my-project
> tsc-watch --onFirstSuccess "node --inspect -r ts-node/register src/app.ts"
7:18:10 AM - Starting compilation in watch mode...
7:18:27 AM - Found 0 errors. Watching for file changes.
Debugger listening on ws://127.0.0.1:9229/b9a130c4-473d-4b55-a512-50ae9cff15a3
For help, see: https://nodejs.org/en/docs/inspector
D:\p\my-project\node_modules\ts-node\src\index.ts:423
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/api/auth/auth.controller.ts:580:29 - error TS2339: Property 'auth' does not exist on type 'Request<ParamsDictionary>'.
580 user.refreshToken = req.auth.refreshToken;
~~~~
src/api/auth/auth.controller.ts:581:23 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary>'.
581 user.userId = req.user.id;
~~~~
src/api/auth/auth.controller.ts:617:82 - error TS2339: Property 'auth' does not exist on type 'Request<ParamsDictionary>'.
617 const user = await userService.getUserInfoByCustomColumn("refreshToken", req.auth.refreshToken);
~~~~
src/api/auth/auth.controller.ts:782:76 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary>'.
782 const user = await userService.getUserInfoByCustomColumn("userId", req.user.id, true);
~~~~
src/api/auth/auth.controller.ts:800:46 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary>'.
800 await userService.updateUserPassword(req.user.id, insertedNewPassword);
~~~~
at createTSError (D:\p\my-project\node_modules\ts-node\src\index.ts:423:12)
at reportTSError (D:\p\my-project\node_modules\ts-node\src\index.ts:427:19)
at getOutput (D:\p\my-project\node_modules\ts-node\src\index.ts:554:36)
at Object.compile (D:\p\my-project\node_modules\ts-node\src\index.ts:760:32)
at Module.m._compile (D:\p\my-project\node_modules\ts-node\src\index.ts:839:43)
at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Object.require.extensions.(anonymous function) [as .ts] (D:\p\my-project\node_modules\ts-node\src\index.ts:842:12)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
Пример одной ошибки
auth.controller.ts - Line 577
const refresh = async (req: Request, res: Response, next: NextFunction) => {
try {
const user = new User();
user.refreshToken = req.auth.refreshToken;
...
}
Request
, являющейся частью Express библиотеки
interface Request<P extends core.Params = core.ParamsDictionary> extends core.Request<P> { }
Есть 2 файла, которые объявляют Express
пространство имен и экспортируют Request
интерфейсы с различными вариациями (см. ниже)
request.d.ts
declare namespace Express {
export interface Request {
user?: any;
auth?: any;
}
}
declarations.d.ts
declare module 'draftjs-to-html';
declare namespace Express {
export interface Request {
availableCountries: number[];
language: string;
pagination: {
pageSize: number;
pageNumber: number;
};
}
}
Так что здесь происходит, что первая компиляция с использованием tsc-watch
выполняется успешно, но затем появляются некоторые ошибки в проекте.
- Означает ли это, что
ts-node
пытается перекомпилировать? - Если так, то почему это не получается? он компилируется с конфигурацией, отличной от
tsc-watch
? - Есть ли флаг, который я мог бы использовать, чтобы пропустить проверку этих ошибок