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