在ts-node中使用import()设置包中的类型为全局类型报错

影依贤者
  • 10

我想将express中路由的类型单独提取作为全局类型,避免每次写接口的时候都引入一次,像下面这样

// global.d.ts
type ReqBody<T = any> = import("express").RequestHandler<
    Record<string, string>,
    any,
    T & { _id: string; isAdmin: boolean }
>;
declare type PostHandler<T = any> = ReqBody<T>;

// example.ts
interface NameOption {
    name: string;
}
const getAge: PostHandler<NameOption> = async (req, res, next) => {
    // xxx
} 

tsc可以直接编译通过,但是当我使用ts-node开发的时候它会报错

error TS2304: Cannot find name 'GetHandler'.

有没有解决办法呢

回复
阅读 1.3k
1 个回答
影依贤者
  • 10
✓ 已被采纳

文档这里说明了全局变量需要从typesRoot选项中指定,但是我按照文档中指定了global.d.ts文件所在的文件夹仍然会出现这个问题,不过原因也知道了,ts-node编译时从入口文件开始编译,如果没有被引入则不被编译,所以只需要把设置全局类型的文件加上export {}改成模块化的,给需要暴露到全局的类型用delcare global{}包上,再在入口处导入就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏