这个函数的签名是啥意思?

Posted

技术标签:

【中文标题】这个函数的签名是啥意思?【英文标题】:What does this function's signature mean?这个函数的签名是什么意思? 【发布时间】:2018-02-06 12:07:37 【问题描述】:

我正在关注这个tutorial,它有一个live example,它定义了这个函数:

onSelect(hero: Hero): void 
  this.selectedHero = hero;

: void 是我不明白的部分。这部分怎么称呼,有什么作用?


我的想法:这是函数的返回类型,但如果是这样的话,不应该

onSelect(hero: Hero): void 
  this.selectedHero = hero;
  return hero;

抛出错误?该应用程序在 Plunker 中运行良好,控制台中没有显示错误(我想知道这是否与 Plunker 有关)。

函数是这样调用的:

  <li *ngFor="let hero of heroes"
    [class.selected]="hero === selectedHero"
    (click)="onSelect(hero)">
    <span class="badge">hero.id</span> hero.name
  </li>

【问题讨论】:

onSelect(hero: Hero): Hero 原型?您的整个问题主体都没有提到原型。我猜你的意思是签名 @gsamaras Ratio 我会说是正常的。可能会增加那些想知道“原型”但后来发现它一点也不有趣的人的流量,比如我自己 :-) 【参考方案1】:

你的想法是正确的。它只是一个返回类型,就像其他编程语言(如 C#)中的函数一样。而当你返回Hero类型的对象时,它应该会报一个类似Type 'Hero' is not assignable to type 'void'的错误,如下图所示:

【讨论】:

【参考方案2】:

函数没有返回任何东西[void]

onSelect(hero: Hero): void 
  this.selectedHero = hero;

这个方法在调用时只是初始化类级别selectedHero,并将英雄传递给方法。如果你看到 typescript 类,你会在组件中找到一个 selectedHero:Hero 变量。

【讨论】:

是的,我知道这门课。感谢您的回答,+1。但是我没有接受你的建议,因为你没有解释我的想法失败的原因。【参考方案3】:

这意味着你的函数没有返回任何东西,你不能这样调用

let result = this.onSelect(someHero); // Here compiler will give you an error that the function can't be in the right side of the statement

查看示例here。可能是 Plunker 的错误,因为在他们的网站上你可以看到错误。

【讨论】:

以上是关于这个函数的签名是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

函数签名中变量名前的 * 和 ** 是啥意思? [复制]

`undefined` 的类型签名在 Haskell 中是啥意思?

php的openssl_sign($data,$sign,$private_key)这个函数的源码是啥?

这个函数声明中 -> List[int] 是啥意思? [复制]

这个 Rnn 函数的最后一行是啥意思?

这个“(function());”,括号内的函数,在javascript中是啥意思? [复制]