繁体   English   中英

编译时检查 typescript 接口是否具有一个或多个属性

[英]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)

要清楚我不想要

这似乎是一个奇怪的请求,但我实际上在做的是首先过滤一个类型,然后我需要知道是否有任何剩余。 然后,我使用该值选择性地在映射类型上添加新属性。 但这是最容易的部分!

以下尝试不起作用:

// 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM