我想檢查一個型別是否為空物件,如果是這種情況,則將其映射到 void 型別。
type notEmpty<T> = T extends {}
? void
: T;
上面的代碼不起作用,因為 evyr 物件擴展了空物件。
另一種方法是扭轉局面:
type notEmpty2<T> = T extends { any: any }
? void
: T;
但這只會匹配具有屬性的物件而any不是任何屬性。
uj5u.com熱心網友回復:
您還可以檢查是否T有一些鍵:
type IsEmpty<T extends Record<PropertyKey, any>> =
keyof T extends never
? true
: false
type _ = IsEmpty<{}> // true
type __ = IsEmpty<{ a: number }> // false
type ___ = IsEmpty<{ a: never }> // false
操場
uj5u.com熱心網友回復:
你可以用 never
type notEmpty<T extends Record<string, any>> = T extends Record<string, never> ? void : T;
type A= notEmpty<{}> <-- A is void
type B = notEmpty<{test:"value"}> <-- B is {test:value}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407286.html
標籤:
