在快速中间件节点打字中导入对象模型

时间:2017-04-16 18:43:37

标签: node.js express typescript middleware

所以我想在TypeScript 2中重新编写一个“旧”项目,我使用的是VS Code的最后一个版本。这个项目使用Passport Express Middleware,因此它的Typing包含一个类型为“any”的express.Request.user但是,我使用Objection作为MySQL ORM,所以我有一个该用户的类。让我们更容易,而不是合并“用户”。让我们假设(我已经尝试过但失败了)我想在我的类型为Order的中间件上使用req.lastOrder,所以我有一个这样的类:

import { Model } from 'objection';

export default class OrderModel extends Model {
  readonly id_order;

  public static get tableName() {
    return 'orders';
  }

  constructor(){
    super();
  } 
}

现在,我有一个Typing在express.Request中合并这个类型,在一个名为“express.d.ts”的文件中:

import OrderModel from '../models/Order';

declare module Express {
  export interface Request {
    lastOrder?: OrderModel;
  }
}

“简化”目录结构如下:

\ src
-- \ models
---- Order.ts
-- \ typings
---- express.d.ts
-- app.js
tsconfig.json
\ node_modules

tsconfig有这个配置:

{
    "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/**/*"
    ]
}

现在,如果我想在中间件中创建req.lastOrder,我没有自动完成或antyhing。在挖掘之后,我得到了在de .d.ts中导入类,打破整个文件...如果我删除导入并保持这样:

declare module Express {
  export interface Request {
    lastOrder?: string;
  }
}

它的工作原理:S很清楚地导入了什么来打破输入。

所以我不知道它是如何工作的......我只是不能让它发挥作用......

你有什么建议吗?谢谢!

0 个答案:

没有答案