将快速应用对象转换为类型而不是值



我试图设置我自己的ts express项目,并试图尽可能多地抽象代码。 在我的应用程序中,我有以下代码

import express from 'express'

const app = express();
const port = 3000;
require('./routes')(app)

app.listen(port, err => {
if (err) {
return console.error(err);
}
return console.log(`server is listening on ${port}`);
});
export default app

我基本上试图将此应用程序中配置的所有路由移动到一个单独的文件夹中,以便于导航。

然后在我的 routes.ts 中,我有这个代码

const testController = require('./controllers/test')
import app from './app';

module.exports = (app) => {
app.get('/test',
testController.testingRoute)
}

因此,每当我尝试运行脚本甚至查看代码时,它都会出错Parameter 'app' implicitly has an 'any' type,然后如果我这样做app:app它会出错'app' refers to a value, but is being used as a type here.

我不想在 tsconfig 中禁用类型检查,我认为这是 TS 的重点,那么我应该如何处理呢?

您可以使用快递。为此用例构建的路由器类:

// router.ts
import express from "express"
const testController = require('./controllers/test')
const router = express.router()
router.get("/test", testController)
export default router
// app.ts
import express from 'express'
import router from './router'
const app = express();
const port = 3000;
app.use("/", router)
app.listen(port, err => {
if (err) {
return console.error(err);
}
return console.log(`server is listening on ${port}`);
});
export default app

查看 http://expressjs.com/en/5x/api.html#router 了解更多信息

> As @slebetman在问题下方发表了评论。解决方案看起来像

const testController = require('./controllers/test')
// import app from './app';
import { Application } from 'express';
module.exports = (app: Application) => {
app.get('/test',
testController.testingRoute)
}

最新更新