如何在粗箭头承诺链中声明类型?
How to declare types in a fat arrow promise chain?
我对 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));
这是因为它需要一个具有前一种语法的 shorthand 参数列表(因此,在以这种方式声明类型信息时,括号是强制性的)吗?
( nor What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript? 都不是特别有用。)
你的语法正确。
在ES6中这两个箭头函数是等价的,一样的;
.catch(error => this.displayError(error));
和
.catch((error) => this.displayError(error));
第一个是 shorthand,仅当您具有精确的 ONE 参数时才允许。
对于 TypeScript,如果您要添加类型装饰——您必须使用带括号的第二种形式。
您确实需要将 name:type
对包裹在括号中,否则解析器不知道如何处理它。这并不是非常不寻常,因为箭头函数在具有多个参数或任何比 foo => bar
更复杂的参数时也需要括号。
由于 foo : bar
语法可以出现在其他一些地方(三元组、对象文字和标签),这对于消除歧义尤为重要。
您可以在 TypeScript 中使用其中任何一个:
.catch(error => this.displayError(error));
或
.catch((error: any) => this.displayError(error));
然而,这是无效的:
.catch(error: any => this.displayError(error));
这只是 TypeScript 语法规则。
不过,shorthand 是您要尝试执行的操作:
.catch(this.displayError);
简单多了!
我对 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));
这是因为它需要一个具有前一种语法的 shorthand 参数列表(因此,在以这种方式声明类型信息时,括号是强制性的)吗?
(
你的语法正确。
在ES6中这两个箭头函数是等价的,一样的;
.catch(error => this.displayError(error));
和
.catch((error) => this.displayError(error));
第一个是 shorthand,仅当您具有精确的 ONE 参数时才允许。
对于 TypeScript,如果您要添加类型装饰——您必须使用带括号的第二种形式。
您确实需要将 name:type
对包裹在括号中,否则解析器不知道如何处理它。这并不是非常不寻常,因为箭头函数在具有多个参数或任何比 foo => bar
更复杂的参数时也需要括号。
由于 foo : bar
语法可以出现在其他一些地方(三元组、对象文字和标签),这对于消除歧义尤为重要。
您可以在 TypeScript 中使用其中任何一个:
.catch(error => this.displayError(error));
或
.catch((error: any) => this.displayError(error));
然而,这是无效的:
.catch(error: any => this.displayError(error));
这只是 TypeScript 语法规则。
不过,shorthand 是您要尝试执行的操作:
.catch(this.displayError);
简单多了!