así que quiero volver a codificar un proyecto "antiguo" en TypeScript 2, estoy usando la última versión de VS Code. Este proyecto usa Passport Express Middleware, por lo que Typing incluye un express.Request.user de tipo "cualquiera". Pero, uso Objetion como MySQL ORM, así que tengo una Clase de ese usuario. Hagámoslo más fácil, en lugar de fusionar "usuario". Supongamos (lo probé y fallé) que quiero tener req.lastOrder en mi middleware del tipo Order, así que tengo una clase como esta:
import { Model } from 'objection'; export default class OrderModel extends Model { readonly id_order; public static get tableName() { return 'orders'; } constructor(){ super(); } }Ahora, tengo un Typing para fusionar este tipo en express.Request, en un archivo llamado "express.d.ts":
import OrderModel from '../models/Order'; declare module Express { export interface Request { lastOrder?: OrderModel; } }La estructura de directorios "simplificada" es así:
\ src -- \ models ---- Order.ts -- \ typings ---- express.d.ts -- app.js tsconfig.json \ node_modulesY el tsconfig tiene esta configuración:
{ "compilerOptions": { "module": "commonjs", "target": "es6", "baseUrl": "./", "noImplicitAny": false, "sourceMap": false, "typeRoots": [ "node_modules/@types" ], "outDir": "out", "declaration": true, "traceResolution": true }, "files": [ "node_modules/objection/typings/objection/index.d.ts", "src/typings/express.d.ts" ], "include": [ "src/**/*" ] }Ahora, si quiero hacer un req.lastOrder dentro de un Middleware, no tengo autocompletado ni nada. Después de investigar, obtuve que Importar la clase dentro de .d.ts, rompe todo el archivo ... Si elimino la importación y la mantengo así:
declare module Express { export interface Request { lastOrder?: string; } }Funciona :S tan claramente que importa lo que rompe la escritura.
Así que no sé cómo funciona... simplemente no puedo hacer que funcione...
¿Tienes alguna sugerencia? ¡Gracias!