TypeScript报错:typeof UserController不存在registerUser属性
问题原因
你把registerUser和loginUser定义为类的实例方法,但在路由中直接通过UserController类本身去访问这些方法——TypeScript会报错,因为实例方法属于类的实例类型,而非类本身的类型(typeof UserController)。
解决方案
根据你的需求(默认导出两个函数),提供三种可行写法:
方案1:导出类的实例(保持类结构)
修改userController.ts,默认导出类的实例:
import { Request, Response } from 'express'; class UserController { registerUser(req: Request, res: Response) { // 你的注册逻辑 } loginUser(req: Request, res: Response) { // 你的登录逻辑 } } export default new UserController();
然后在userRoutes.ts中导入实例并调用方法:
import express from 'express'; import userController from '../controllers/userController'; const router = express.Router(); router.post('/register', userController.registerUser); router.post('/login', userController.loginUser); export default router;
方案2:直接导出函数(无需类结构)
如果不需要类的特性,直接导出两个函数更简洁:
// userController.ts import { Request, Response } from 'express'; export const registerUser = (req: Request, res: Response) => { // 注册逻辑 }; export const loginUser = (req: Request, res: Response) => { // 登录逻辑 }; // 若要默认导出,可包裹为对象 export default { registerUser, loginUser };
路由中使用方式同方案1,或直接解构导入:
import { registerUser, loginUser } from '../controllers/userController'; router.post('/register', registerUser); router.post('/login', loginUser);
方案3:将方法改为静态方法
如果要保留类且直接通过类访问方法,把方法声明为静态:
// userController.ts import { Request, Response } from 'express'; export default class UserController { static registerUser(req: Request, res: Response) { // 注册逻辑 } static loginUser(req: Request, res: Response) { // 登录逻辑 } }
此时路由中的原有写法无需修改,静态方法属于类本身,TypeScript不会再报错。
内容的提问来源于stack exchange,提问作者Emmanuel Igwesi
相关产品推荐
相关产品推荐

