【问题标题】:Force object to have at least one key ( Object.keys(o).length > 0 )强制对象至少有一个键( 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};

【问题讨论】:

  • 我认为这不可能。如果您对您的方案多说一些,我们可能会有更多的想法。
  • 您应该添加更多详细信息。这在抽象上是不可能的,但在某些情况下是可能的。

标签: typescript tsc typescript3.0


【解决方案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: ""})

【讨论】:

猜你喜欢
  • 2012-04-04
  • 2016-08-20
  • 2020-07-01
  • 2022-01-13
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多