You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript导出函数异常:getSensitiveUser非函数的排查求助

TypeScript导出函数无法识别为函数的异常排查

在TypeScript+Express开发场景中,调用导出的控制器函数时触发TypeError: users.getSensitiveUser is not a function错误,相关代码逻辑及问题细节如下:

1. 类型定义文件(../types)

export type role = "Client" | "Admin";

export interface User {
  id: number;
  nickname: string;
  email: string;
  verifiedEmail: boolean;
  password: string;
  role: role;
  avatar: string;
}

export type SensitiveUser = Omit<User, "email" | "password">;

2. 控制器文件(../controllers/user.ts)

import { SensitiveUser, User } from "../types";
import usersData from "./user.json";

const user: User[] = usersData as User[];

export const getUsers = (): User[] => {
  return user;
};

export const getSensitiveUser = (): SensitiveUser[] => {
  return user;
};

3. 模拟数据JSON文件(./user.json)

[
  {
    "id": 1,
    "nickname": "qwe",
    "email": "qwe@fakemail.com",
    "verifiedEmail": true,
    "password": "1234",
    "role": "client",
    "avatar": "url"
  },
  {
    "id": 2,
    "nickname": "asd",
    "email": "asd@fakemail.com",
    "verifiedEmail": false,
    "password": "1234",
    "role": "admin",
    "avatar": "url"
  }
]

4. Express路由文件(../routes/users.ts)

import express from "express";
import * as users from "../controllers/user";

const router = express.Router();

router.get("/", (_req, res) => {
  res.send(users.getSensitiveUser());
});

router.post("/", (_req, res) => {
  res.send("post user");
});

export default router;

触发的错误信息

TypeError: users.getSensitiveUser is not a function at D:\Proyectos\listil\api\src\routes\users.ts:7:18

排查方向与解决方案

核心排查点及修复方式:

  • 路径/文件名校验:确认路由中../controllers/user的导入路径是否正确,控制器文件是否为user.ts(注意大小写:Windows系统不区分,但Linux/macOS严格区分,避免因大小写不匹配导致导入错误)。
  • TS编译配置检查:查看tsconfig.json中的module、outDir等配置,确保编译后的JS文件输出路径与导入路径匹配,避免误导入未编译的TS文件或错误目录下的文件。
  • 导出/导入语法适配:
    若当前导出语法存在编译后不兼容的情况,可修改控制器为默认导出:
    // 控制器文件新增默认导出
    export default { getUsers, getSensitiveUser };
    
    对应路由修改导入方式:
    import users from "../controllers/user";
    
  • 附带类型隐患修复:注意JSON中role值为小写client/admin,但类型定义中是大写Client/Admin,类型断言as User[]会存在类型不匹配的隐患,后续可能引发其他错误,建议统一大小写规范。

内容的提问来源于stack exchange,提问作者Elbongo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:18:24