强制对象至少有一个键( Object.keys(o).length > 0 )
Posted
技术标签:
【中文标题】强制对象至少有一个键( Object.keys(o).length > 0 )【英文标题】:Force object to have at least one key ( Object.keys(o).length > 0 ) 【发布时间】:2019-02-09 22:29:34 【问题描述】:假设我有这个对象
export interface Name
[key: string]: boolean
const v = <Name>;
如何防止它编译?我想要做的是强制v
至少拥有一个属性:
const v = <Name>foo: true;
【问题讨论】:
我认为这不可能。如果您对您的方案多说一些,我们可能会有更多的想法。 您应该添加更多详细信息。这在抽象上是不可能的,但在某些情况下是可能的。 【参考方案1】:您不能对变量执行此操作。首先,您不能同时推断变量的类型并为其添加注释。默认情况下,您添加的任何注释都不能限制至少一个任意属性的存在。
如果你有一个函数,并且你想确保一个函数参数至少有一个属性,我们可以使用条件类型来生成类似于自定义错误的东西:
function noEmpty<T>(o: T & (keyof T extends never ? "No empty object" : ))
noEmpty() // err Argument of type '' is not assignable to parameter of type ' & "No empty object"'.
noEmpty( a: "")
【讨论】:
期待github.com/Microsoft/TypeScript/pull/29317 可以让解决方案更干净 @Yozi 是的,这会有所帮助,但它已被推迟,所以我不知道它何时可用..以上是关于强制对象至少有一个键( Object.keys(o).length > 0 )的主要内容,如果未能解决你的问题,请参考以下文章
Object.keys() 从集合中返回 MongoDB 对象上的意外键 [重复]