我想声明我的函数的args是对象。
function foo(obj1: object, obj2: object){
obj1.name = 'foo'
obj2[MAYBE_ANY_PROPERTIES] = 'bar'
}
但是当我尝试编译时,tsc告诉Property 'name' does not exist on type '{}'
。
我理解这个错误,但无论如何,我想告诉编译器obj1
是一个可能有任何属性的对象,但它永远不应该是原始值。我能怎么做?
如果希望对象可索引,则需要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