所以我想在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很清楚地导入了什么来打破输入。
所以我不知道它是如何工作的......我只是不能让它发挥作用......
你有什么建议吗?谢谢!