我对TypeScript语法很陌生。使用这样的现有代码:
private checkUsername(username: FormControl): boolean {
return this.userService
.findUser(username.value)
.catch(error => this.displayError(error));
}
TypeScript linter警告参数error
隐含属于any
类型。很公平,但当我尝试在胖箭头中添加我认为类型声明的内容时:
.catch(error:any => this.displayError(error));
linter警告它需要,
代替:
。
我可以通过在括号中包装参数和类型声明来平息错误:
.catch((error:any) => this.displayError(error));
这是因为它期望使用前一种语法的速记参数列表(因此在以这种方式声明类型信息时必须使用括号)?
(What's the meaning of "=>" in TypeScript? (Fat Arrow)和What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?都不是特别有用。)
答案 0 :(得分:4)
您可以在TypeScript中使用其中任何一个:
.catch(error => this.displayError(error));
或
.catch((error: any) => this.displayError(error));
然而,这是无效的:
.catch(error: any => this.displayError(error));
这只是TypeScript语法规则。
但是,您尝试做的事情有简写:
.catch(this.displayError);
更简单!
答案 1 :(得分:1)
您的语法正确。
在ES6中,这两个箭头函数是等价的,相同;
.catch(error => this.displayError(error));
和
.catch((error) => this.displayError(error));
第一个是速记,只有在您拥有exaclty ONE 参数时才允许使用。
使用TypeScript,如果要添加类型修饰,则必须使用带括号的第二个表单。
答案 2 :(得分:1)
您需要将name:type
对包装在parens中,否则解析器不知道如何处理它。这并非常不寻常,因为当箭头函数有多个参数或比foo => bar
更复杂的任何参数时,箭头函数也需要parens。
由于foo : bar
语法可以显示在其他一些地方(三元组,对象文字和标签),因此消除歧义尤为重要。