node.js - Typescript + nodemon + VS Code para trabajar juntos con la fusión de declaraciones
Estoy agregando este middleware a mi aplicación express
app.use(function(req: express.Request, res: express.Response, next: express.NextFunction) {
req.rawBody = 'hello2';
next();
});
Y se añadió custom.d.ts
declare namespace Express {
export interface Request {
rawBody: string;
}
}
VS Code no muestra errores y puedo ejecutar este comando
tsc && node --unhandled-rejections=strict ./dist/app.js
Pero quiero usar nodemon para escuchar los cambios en los archivos. Así que agregué este script a package.json
"dev": "nodemon app.ts",
Entonces comenzó a mostrar este error
La propiedad 'rawBody' no existe en el tipo 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'
Para deshacerse del error, añadí esto al archivo tsconfig.json
"files": ["custom.d.ts"],
"ts-node": {
"files": true
}
Ahora nodemon puede ejecutarse bien, pero VS Code está mostrando el mismo error.
Luché durante horas para lograr que eso funcione junto. Se agradece cualquier ayuda.
Actualización: Actualmente estoy usando el paquete tsc-watch y me está dando el resultado deseado.
"dev-server": "tsc-watch --noClear -p ./tsconfig.json --onSuccess \"node ./dist/app.js\"",
O si ejecuto estos dos scripts por separado, obtengo los resultados deseados. El problema con este enfoque es que cada vez que hay un error en el código, nodemon no lo detecta ya que está sirviendo el archivo js. Mientras que el comando tsc detecta el error en el código, puedes pasarlo por alto fácilmente hasta que revises el error en la consola.
{...
"watch": "tsc -w",
"start2": "nodemon ./dist/app.js",
...}
Respuesta #1
Dentro de package.json prueba esto:
"dev": "nodemon -T app.ts"
La opción -T utilizará transpileModule más rápido de TypeScript.
Actualizar
El modo -T no detectará errores de tipo, pero no deberíamos querer omitir la comprobación de errores de tipo. Así que si tenemos nuestra ruta de tipo personalizada definida dentro de tsconfig.json, entonces el siguiente comando funcionará como se desea:
"dev": "nodemon --files app.ts"
Con este comando, no habrá ningún error para nuestra definición de tipo personalizada, pero se generarán otros errores de tipo según lo deseado.
Por favor, asegúrese de tener
"paths": {
"*": [
"node_modules/*",
"path/to/custom/types/*"
]
}
dentro de compilerOptions en el archivo tsconfig.json.
