如何将函数返回的解构值直接赋值给对象属性?
问题与解决方法
问题背景
我有一个返回两个值的函数,原本希望将该函数的返回值解构后直接赋值给filters对象的sort和sortOrder属性,但这样操作会触发TypeScript错误:
Property 'sort' does not exist on type 'DashboardSortingPreferences'.
尝试的错误写法如下:
const { this.filters.sort, this.filters.sortorder } = this.dashboardColumnSortingService.initializeDashboardSortProperties( this.user, this.dashboardName, );
以下写法可以正常运行,我也理解其原理,但想了解是否存在直接将sorted_column和direction赋值给sort和sortOrder属性的方法:
const { sorted_column, direction } = this.dashboardColumnSortingService.initializeDashboardSortProperties( this.user, this.dashboardName, ); this.filters.sort = sorted_column; this.filters.sortorder = direction;
可行的直接赋值方式
有两种简洁的方法可以一步完成赋值,不需要中间变量:
方法1:解构重命名 + Object.assign
Object.assign(this.filters, { sort: sorted_column, sortorder: direction } = this.dashboardColumnSortingService.initializeDashboardSortProperties( this.user, this.dashboardName, ));
方法2:括号包裹的解构赋值(推荐)
({ sorted_column: this.filters.sort, direction: this.filters.sortorder } = this.dashboardColumnSortingService.initializeDashboardSortProperties( this.user, this.dashboardName, ));
注意必须用括号包裹整个语句,否则JavaScript会把开头的{}解析成代码块,而非解构赋值的语法结构。
关于TypeScript错误的补充
之前的错误写法本身存在语法问题——解构赋值的左侧不能直接使用this.filters.sort这类对象属性路径。另外TypeScript提示的类型错误,需要确认DashboardSortingPreferences类型定义中确实包含sort和sortorder属性;如果是临时需求,也可以通过类型断言(this.filters as any)绕过检查,但优先建议修正类型定义以保证代码类型安全。
内容的提问来源于stack exchange,提问作者Peter Boomsma
相关产品推荐
相关产品推荐

