如何在粗箭头承诺链中声明类型?

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);

简单多了!