我已经创建了一个codesandbox,以便于试用。但下面也是与我的问题更相关的部分。
这是期望提取原始Mongoose文档的类型的类型(它没有。):
// ⭐ class Document<T = any, TQueryHelpers = any, DocType = any>
type ObtainRawDocType<T> = T extends mongoose.Document<
infer A,
infer B,
infer C
>
? C // <--- ⭐ Must return the raw document's type.
: never;
这就是上面的泛型被使用的地方(为了测试上面的泛型,返回类型故意不正确。):
export function clearFields<
T extends mongoose.Document,
U extends PropertyKey[]
>(dataObj: T, privateFields: U): ObtainRawDocType<T> {
但是,这个cc1
的类型被检测为unknown
:
const cc1 = clearFields(c1, ["birthdate"]);
1条答案
按热度按时间yjghlzjz1#
typegoose discord上也提出了这个问题,我们得出的结论是,结果
unknown
是因为typescript丢弃了原始类型,如果它与Omit
类型进行了AND,并且在结构上没有在任何地方使用。问题的打印脚本操场示例
答案基本上是增加
mongoose.Document
类型,以便在结构上使用所需的泛型(在本例中,当前命名为DocType
泛型(mongoose 7.3.1))注意事项:
declare module "mongoose"
的地方执行import "mongoose"
,否则整个mongoose
模块/命名空间将被 * 覆盖 * 而不是 * 增强 *All declarations of 'Document' must have identical type parameters.ts(2428)