[英]Compile time check if typescript interface has one or more properties
我需要找到一种方法来检查typescript 接口在编译时是否具有一个或多个属性(属性名称未知)。
因此,例如给出以下定义:
export type Cat = {};
export type Dog = { barking: boolean };
我需要一个条件类型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
(这是运行时检查)这似乎是一个奇怪的请求,但我实际上在做的是首先过滤一个类型,然后我需要知道是否有任何剩余。 然后,我使用该值选择性地在映射类型上添加新属性。 但这是最容易的部分!
以下尝试不起作用:
// This always returns true
type HasAnyProperties<T> = T extends { [key: string]: any } ? true : false;
如果我知道属性的名称会容易得多,但我不知道。
我猜这是否可能是它看起来像RequireAtLeastOne 。
原来它就像这样简单:
export type HasAnyProperties<T> = {} extends T ? false : true;
至少对我而言。 如果有类似需求的人发现此问题,请发表评论或添加新答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.