如何告诉编译器这个变量不是原始值?

问题描述 投票:1回答:1

我想声明我的函数的args是对象。

function foo(obj1: object, obj2: object){
  obj1.name = 'foo'
  obj2[MAYBE_ANY_PROPERTIES] = 'bar'
}

但是当我尝试编译时,tsc告诉Property 'name' does not exist on type '{}'

我理解这个错误,但无论如何,我想告诉编译器obj1是一个可能有任何属性的对象,但它永远不应该是原始值。我能怎么做?

typescript tsc
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.