我试图创建一些基于mongo模式模型的类型,并在mono repo中与前端共享相同的类型。
范例类型:
import { Types } from "mongoose";
export interface Profile {
userId: Types.ObjectId;
education: {
university: Types.ObjectId;
};
}
我的配置文件架构使用此配置文件接口来定义类型,并且在前端使用了相同的接口。由于前端不(需要)了解mongoose类型,我希望将userId
和education.university
作为字符串。顺便说一句,当我从前端服务器获得API响应时,我仅将这些值作为字符串。
我已经尝试了一个TSMap器,定义为here。这部分地解决了我的问题-我可以看到userId
在前端被转换为字符串。但是这并不能解决嵌套对象education
。我可以将education
定义为单独的类型并使用Map器,但我认为这不是一种可伸缩的方式。我希望Map器也能处理嵌套类型的类型转换。typeMapper.ts
import { Types } from "mongoose";
type MapObjectIdToString<PropType> = PropType extends Types.ObjectId
? string
: PropType;
export type MapDbObject<T> = {
[PropertyKey in keyof T]: MapObjectIdToString<T[PropertyKey]>;
};
我正在转换Profile
类型,如下所示
export type UiProfile = MapDbObject<Profile>; // here `userId` is string, but `university` is still Types.ObjectId
是否有方法更新我的TS Mapper,将所有字段(包括嵌套对象中的字段)从Types.ObjectId
转换为string
?提前感谢!
1条答案
按热度按时间azpvetkf1#
递归类型可以做到这一点:
也适用于数组。请在下面亲自尝试:
Playground