【发布时间】:2020-11-14 16:08:38
【问题描述】:
我需要找到一种方法来检查打字稿界面是否具有一个或多个属性(属性名称未知)在编译时 .
因此例如给出以下定义:
export type Cat = {};
export type Dog = { barking: boolean };
我需要一个conditional type HasAnyProperties<T>,它将给我:
type catHasProperties = HasAnyProperties<Cat>; // false (because Cat is {})
type dogHasProperties = HasAnyProperties<Dog>; // true (because Dog has one or more properties)
明确我不想要:
- 使用
Object.keys(obj).length(这是运行时检查) - 致enforce or require one or more known properties。我只想检查。
这似乎是一个奇怪的请求,但我实际上在做的是首先filtering a type,然后我需要知道是否有任何剩余。然后,我使用该值选择性地在映射类型上添加新属性。但这是最简单的部分!
以下尝试无效:
// This always returns true
type HasAnyProperties<T> = T extends { [key: string]: any } ? true : false;
如果我知道属性的名称会容易得多,但我不知道。
如果这可能,我的猜测是它看起来像RequireAtLeastOne。
【问题讨论】:
标签: typescript conditional-types