簡體   English   中英

如何檢查 object 類型的原型是否為 Typescript 中的 Object.prototype?

[英]How to check if an object type's prototype is Object.prototype in Typescript?

給定一個任意類型,我想檢查該類型是否為 object,其原型為Object.prototype 換句話說,我想排除函數、集合、映射、自定義類等。我不能只列出所有可能的 object 類型,因為自定義類的數量是無限的。 這可能嗎?

我想這樣做以遞歸地將映射應用於 object。這就是我所擁有的:

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

這不可能。 typescript類型不包含object的原型鏈信息,它只指定了屬性的類型接口及其簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM