我想声明我函数的args是对象。
function foo(obj1: object, obj2: object){
obj1.name = 'foo'
obj2[MAYBE_ANY_PROPERTIES] = 'bar'
}
但是当我尝试编译时,tsc告诉Property 'name' does not exist on type '{}'
。
我理解此错误,但是无论如何,我想告诉编译器obj1
是一个可以具有任何属性的对象,但是它永远不能是原始值。我该怎么办?
答案 0 :(得分:5)
如果希望对象可索引,则需要一个string
索引。您可以使用Record
类型来获得这种效果:
function foo(obj1: Record<string, any>, obj2: Record<string, any>){
obj1.name = 'foo'
}
foo(1, 2) //err
foo("", "") // err
foo({ name: "" }, { name: "" }) // ok
如果您的对象必须包含特定属性,则可以考虑使用更严格的类型:
function foo(obj1: {name: string } & Record<string, any>, obj2: {name: string } & Record<string, any>) {
obj1.name = 'foo'
}
foo({ name: "" }, { name_: "" }) // error no name