如何检查对象类型的原型是否为Typescript中的Object.prototype?
给定一个任意类型,我想检查该类型是否是原型为Object.prototype. 换句话说,我想排除函数、集合、映射、自定义类等。我不能只列出所有可能的对象类型,因为自定义类的数量是无限的。这可能吗?
我想这样做以递归地将映射应用于对象。这是我所拥有的:
type MapDeep<T> = F<
T extends Primitive ? T
: T extends Array<infer U> ? Array<MapDeep<U>>
: T extends ReadonlyArray<infer U> ? ReadonlyArray<MapDeep<U>>
: T extends Set<infer U> ? Set<MapDeep<U>>
: T extends Map<infer K, infer V> ? Map<K, MapDeep<V>>
: T extends Partial<Record<string, any>> ? { [K in keyof T]: MapDeep<T[K]> }
: T
>;
但是,对于具有除 之外的原型的对象Object.prototype,这不起作用。例如,MapDeep<() => void>返回F<{}>而不是F<() => void>,因为它匹配Partial<Record<string, any>>。如何判断类型的原型是否为Object.prototype?
THE END
二维码