Typescript 如何告诉编译器此变量不是基元值?
我想声明函数的参数是对象Typescript 如何告诉编译器此变量不是基元值?,typescript,tsc,Typescript,Tsc,我想声明函数的参数是对象 function foo(obj1: object, obj2: object){ obj1.name = 'foo' obj2[MAYBE_ANY_PROPERTIES] = 'bar' } 但当我尝试编译时,tsc告诉我类型“{}”上不存在属性“name” 我理解这个错误,但无论如何,我想告诉编译器obj1是一个可能有任何属性的对象,但它永远不应该是一个基元值。我该怎么做?如果希望对象可索引,则需要字符串索引。您可以使用记录类型来获得该效果: functi
function foo(obj1: object, obj2: object){
obj1.name = 'foo'
obj2[MAYBE_ANY_PROPERTIES] = 'bar'
}
但当我尝试编译时,tsc告诉我类型“{}”上不存在属性“name”
我理解这个错误,但无论如何,我想告诉编译器obj1是一个可能有任何属性的对象,但它永远不应该是一个基元值。我该怎么做?如果希望对象可索引,则需要字符串索引。您可以使用记录类型来获得该效果:
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
如果希望对象可索引,则需要字符串索引。您可以使用记录类型来获得该效果:
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
简单地写:obj1.name='foo'简单地写:obj1.name='foo'