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})
。是的,这就是诀窍。非常感谢。你的第二个看起来最正确,也最接近这个家伙的目标。