Typescript 具有多个参数的静态对象分解示例

Typescript 具有多个参数的静态对象分解示例,typescript,Typescript,我有一段代码如下所示: onFilterChange = ({name}: {name: string}) => { console.log(`entered onFilterChange and name is ${name}` ); } onFilterChange = ({name, value}: {name: string, value: string }) => { console.log(`entered onFilterChange and name

我有一段代码如下所示:

onFilterChange = ({name}: {name: string}) => {
    console.log(`entered onFilterChange and name is ${name}` );
}
onFilterChange = ({name, value}: {name: string, value: string }) => {
   console.log(`entered onFilterChange and name is ${name} and value is ${value}`);
}
对于这一个参数,它编译并运行

但是,如果我要添加另一个论点:

onFilterChange = ({name}: {name: string}, {value}: {value: string}) => {
   console.log(`entered onFilterChange and name is ${name} and value is ${value}` );
        }
虽然它确实编译,但在运行时,存在一个错误: TypeError:\u b未定义

按如下方式调用上述函数:

this.props.onChange({name, value});
那么我是不是没有看到明显的东西?我在网上找到的几个例子都只显示了一个参数——所以它是有效的。
谢谢

您错误地使用了对象解构。因为函数只有一个参数,它是一个具有
name
value
属性的对象。因此,您必须这样做:

onFilterChange = ({name}: {name: string}) => {
    console.log(`entered onFilterChange and name is ${name}` );
}
onFilterChange = ({name, value}: {name: string, value: string }) => {
   console.log(`entered onFilterChange and name is ${name} and value is ${value}`);
}

因此,您的签名和调用函数的方式不匹配。您需要执行以下操作之一:

// Keep signature and change the way you invoke:
onFilterChange = ({name}: {name: string}, {value}: {value: string})
onFilterChange({name}, {value}) <-- as separate arguments
//保留签名并更改调用方式:
onFilterChange=({name}:{name:string},{value}:{value:string})

onFilterChange({name},{value})不应该是
({name,value}:{name:string,value:string})=>…
?不能将两个对象作为单独的位置参数传递。您当前的定义需要调用
this.props.onChange({name},{value})
。是的,这就是诀窍。非常感谢。你的第二个看起来最正确,也最接近这个家伙的目标。