传入this.属性作为方法参数报错,对象字面量写法疑问求解
问题解答
核心问题:对象字面量的语法用错了
你踩的是对象字面量简写语法的坑——{ 变量名 }这种简写形式,要求前面必须是已经声明好的变量,它会自动把变量名当对象的键,变量值当对应的值。但直接写{ this.sourceApp }是不符合语法的,解释器根本不知道你要把this.sourceApp对应到哪个键上,TypeScript的类型检查还会因为这个语法错误,把this误判成any类型,最后就抛出了你看到的“类型不匹配”错误。
不用中间变量的正确写法
不想写一堆临时变量的话,有两种更简洁的方式:
显式写键值对
直接明确写出每个键和对应的值,最直观也不容易错:var t = new Template({ sourceApp: this.sourceApp, eventType: this.eventType, alertType: this.alertType, channelType: this.channelType });解构this的属性后用简写
先把this上需要的属性解构出来,再用对象简写:const { sourceApp, eventType, alertType, channelType } = this; var t = new Template({ sourceApp, eventType, alertType, channelType });
为啥第一种写法能跑?
你之前先把this.sourceApp赋值给同名变量sourceApp,这时候{ sourceApp }就符合简写规则了,相当于{ sourceApp: sourceApp },解释器能正确识别键和值,TypeScript也能正常推断变量类型,所以不会报错。
内容的提问来源于stack exchange,提问作者Jake Gergen
相关产品推荐
相关产品推荐

