说我有这个对象
export interface Name {
[key: string]: boolean
}
const v = <Name>{};
如何防止其编译?我想做的是强制v
拥有至少一个属性:
const v = <Name>{foo: true};
答案 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: ""})