具有多个参数的静态示例中的对象解构

时间:2018-02-23 17:39:18

标签: typescript

我有一段看起来像这样的代码:

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

对于这一个论点,它编译并运行。

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

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

虽然它确实编译,但在运行时会出错: TypeError:_b未定义

上面的函数调用如下:

this.props.onChange({name, value});

所以我没有看到明显的东西?我发现网上的一些例子都只显示了一个论点 - 所以它有效。 感谢

2 个答案:

答案 0 :(得分:1)

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

// Keep signature and change the way you invoke:
onFilterChange = ({name}: {name: string}, {value}: {value: string})
onFilterChange({name}, {value}) <-- as separate arguments

或者

// Change signature so it takes only one argument:
onFilterChange = ({name, value}: {name: string, value: string})
onFilterChange({name, value}) <-- as single argument

答案 1 :(得分:0)

你错误地使用了对象解构。因为该函数只有一个参数,即具有namevalue属性的对象。因此你必须这样做:

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