从猫鼬 HydratedDocument 中删除某些字段
Remove certain fields from the mongoose HydratedDocument
当我们学习文档时,id
属性 仍然包含未定义,可能会导致意外错误。
为了为我的团队简化这一过程,我想从自定义类型的 HydratedDocument 中删除 id
字段。
// @types/mongoose/index.d.ts
import 'mongoose';
import { HydratedDocument as _Hydra, Document as _Docu } from 'mongoose';
declare module 'mongoose' {
export type HydratedDocument<T, TMethodsAndOverrides, TVirtuals> = Omit<_Hydra<T>, 'id' | '__v'>;
// tsconfig.json
"typeRoots": ["node_modules/@types", "@types"]
它仍然不适合我。当我导入类型并尝试声明一个变量时。然后我发现实际上 id
属性 来自文档 class。以下是更新后的打字
import 'mongoose';
import { HydratedDocument as _Hydra, Document as _Docu } from 'mongoose';
declare module 'mongoose' {
export type HydratedDocument<T, TMethodsAndOverrides, TVirtuals> = Omit<_Hydra<T>, 'id' | '__v'>;
export class Document implements Omit<_Docu, 'id'> {}
}
不幸的是,这也不起作用。
这是不可能的。但是我目前正在使用一个 hack
import { Document } from 'mongoose';
import { ObjectId } from 'bson';
type _MongooseDoc<T> = Document<unknown, any, T> & T & { _id: ObjectId };
export type MongooseDoc<T> = Omit<_MongooseDoc<T>, '__v' | 'id'>;
export type MongooseRef<T> = MongooseDoc<T> | string | ObjectId;
export type MongooseLean<T> = Omit<MongooseDoc<T>, keyof Document<unknown, any, T>> & { _id: ObjectId };
当我们学习文档时,id
属性 仍然包含未定义,可能会导致意外错误。
为了为我的团队简化这一过程,我想从自定义类型的 HydratedDocument 中删除 id
字段。
// @types/mongoose/index.d.ts
import 'mongoose';
import { HydratedDocument as _Hydra, Document as _Docu } from 'mongoose';
declare module 'mongoose' {
export type HydratedDocument<T, TMethodsAndOverrides, TVirtuals> = Omit<_Hydra<T>, 'id' | '__v'>;
// tsconfig.json
"typeRoots": ["node_modules/@types", "@types"]
它仍然不适合我。当我导入类型并尝试声明一个变量时。然后我发现实际上 id
属性 来自文档 class。以下是更新后的打字
import 'mongoose';
import { HydratedDocument as _Hydra, Document as _Docu } from 'mongoose';
declare module 'mongoose' {
export type HydratedDocument<T, TMethodsAndOverrides, TVirtuals> = Omit<_Hydra<T>, 'id' | '__v'>;
export class Document implements Omit<_Docu, 'id'> {}
}
不幸的是,这也不起作用。
这是不可能的。但是我目前正在使用一个 hack
import { Document } from 'mongoose';
import { ObjectId } from 'bson';
type _MongooseDoc<T> = Document<unknown, any, T> & T & { _id: ObjectId };
export type MongooseDoc<T> = Omit<_MongooseDoc<T>, '__v' | 'id'>;
export type MongooseRef<T> = MongooseDoc<T> | string | ObjectId;
export type MongooseLean<T> = Omit<MongooseDoc<T>, keyof Document<unknown, any, T>> & { _id: ObjectId };