强制对象具有至少一个键(Object.keys(o).length> 0)

时间:2018-09-04 20:58:49

标签: typescript tsc typescript3.0

说我有这个对象

export interface Name {
   [key: string]: boolean
}

const v = <Name>{};

如何防止其编译?我想做的是强制v拥有至少一个属性:

const v = <Name>{foo: true};

1 个答案:

答案 0 :(得分:5)

您不能对变量执行此操作。首先,您不能同时推断变量的类型并为其添加注释。默认情况下,您添加的任何注释都不会限制至少一个任意属性的存在。

如果您有一个函数,并且想要确保一个函数参数至少具有一个属性,我们可以使用条件类型来生成类似于自定义错误的内容:

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: ""})