为什么Typescript不会为遗漏的参数引发错误?

布鲁诺·夸雷斯玛

我有以下代码:

type Callback = (a: string, b: string) => void

const observer: Callback = function(a: string): void {
  console.log(a)
}

observer('foo')

Typescript在最后一行抱怨:

Expected 2 arguments, but got 1.(2554)

为什么TS仅在观察者调用上抱怨而不在执行观察者的第3行上抱怨?

游乐场链接:http://www.typescriptlang.org/play/?ssl=7&ssc=16&pln=1&pc=1#code/C4TwDgpgBAwghgGwQIzgYwNZQLxQBRwBcUAzsAE4CWAdgOYA0UyxZVdAlDgHxQBuA9pQAmAKBFp+1MlH7ISEcrwXF4SVJhxQAZgFdqaYJUkEWFGrXbEBwqAG8RUKBKn8EEAHQJ+tAuxEBfMVl5RQU8AHItfn5w9iA

尼古拉斯塔

他们在文档中有一节讨论了https://www.typescriptlang.org/docs/handbook/type-compatibility.html#comparing-two-functions

基本上,这是因为在javascript中,忽略额外的函数参数是合法的,并且有些常见。例如,以下代码声称它接受一个b参数,但从未对其执行任何操作:

const observer: Callback = function(a: string, b: string): void {
  console.log(a);
}

大概您同意这应该与Callback类型定义匹配但是b: string,参数列表有什么作用?它唯一的作用就是更改的值observer.length,并更改的返回值observer.toString()实际上,在大多数情况下,这只是浪费输入。

作为其真实世界情况下,阵列具有几个高阶函数如.map.filter.reduce您将一个函数传递给它以控制行为。您的函数将通过几段数据传递,但是在许多情况下,您只需要一个。因此,不应将以下内容标记为类型错误:

const numbers = [1, 2, 3];
const biggerNumbers = numbers.map(value => value + 1);

您的函数实际上是通过值,索引和数组传递的。但是您可以编写忽略最后两个(甚至很少三个,尽管很少见)的代码。


简而言之:类型定义是有强迫你一定值传递的功能。不能确保该函数实际使用这些值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么TypeScript不会为未定义类型引发编译错误

来自分类Dev

当我为对象分配数字时,为什么TypeScript不会引发错误?

来自分类Dev

如果我们调用不带括号的函数,为什么Typescript不会引发错误?

来自分类Dev

为什么window.something不会引发错误?

来自分类Dev

为什么在MYSQL中比较类型不会引发错误?

来自分类Dev

为什么以下代码不会引发错误?

来自分类Dev

为什么缺少DataContract时WCF不会引发错误?

来自分类Dev

python 2.7:为什么IPython Notebook会为非ASCII字符引发错误?

来自分类Dev

为什么此Theano.scan函数不会引发错误?

来自分类Dev

创建我已经存在的表时,SAS,Proc SQL为什么不会引发错误

来自分类Dev

为什么在函数定义之外声明的函数变量不会引发错误?

来自分类Dev

为什么在JavaScript中分配Infinity不会引发错误,但不起作用?

来自分类Dev

为什么在传递T时Pick <T,K>不会引发错误?

来自分类Dev

意外的结果:为什么访问未定义的变量不会引发错误?

来自分类Dev

为什么访问布尔值的属性不会引发错误-javascript

来自分类Dev

为什么此Theano.scan函数不会引发错误?

来自分类Dev

为什么Python的unittest.assertRaises()不会在这里引发错误?

来自分类Dev

在 React 与 ES6 中,constructor(prop) 不会引发错误。为什么?

来自分类Dev

在 C 中,变量的多次初始化不会引发错误。为什么?

来自分类Dev

传递错误类型的prop时,Typescript不会引发错误

来自分类Dev

为什么在键入接收数组的函数时TypeScript 3.7.5会引发错误?

来自分类Dev

startVPNTunnel不会引发错误

来自分类Dev

接受参数并引发错误

来自分类Dev

为什么pastespecial方法有时会引发错误1004而其他时候却不会呢?

来自分类Dev

为什么`std :: prev`不会在`std :: unordered_set`的迭代器中引发错误?

来自分类Dev

当数组必须为某种类型时,为什么flowjs不会在空数组上引发错误?

来自分类Dev

为什么pastespecial方法有时会引发错误1004而其他时候却不会呢?

来自分类Dev

为什么Gradle在缺少的项目属性上引发错误

来自分类Dev

为什么此Java转换会引发错误?

Related 相关文章

  1. 1

    为什么TypeScript不会为未定义类型引发编译错误

  2. 2

    当我为对象分配数字时,为什么TypeScript不会引发错误?

  3. 3

    如果我们调用不带括号的函数,为什么Typescript不会引发错误?

  4. 4

    为什么window.something不会引发错误?

  5. 5

    为什么在MYSQL中比较类型不会引发错误?

  6. 6

    为什么以下代码不会引发错误?

  7. 7

    为什么缺少DataContract时WCF不会引发错误?

  8. 8

    python 2.7:为什么IPython Notebook会为非ASCII字符引发错误?

  9. 9

    为什么此Theano.scan函数不会引发错误?

  10. 10

    创建我已经存在的表时,SAS,Proc SQL为什么不会引发错误

  11. 11

    为什么在函数定义之外声明的函数变量不会引发错误?

  12. 12

    为什么在JavaScript中分配Infinity不会引发错误,但不起作用?

  13. 13

    为什么在传递T时Pick <T,K>不会引发错误?

  14. 14

    意外的结果:为什么访问未定义的变量不会引发错误?

  15. 15

    为什么访问布尔值的属性不会引发错误-javascript

  16. 16

    为什么此Theano.scan函数不会引发错误?

  17. 17

    为什么Python的unittest.assertRaises()不会在这里引发错误?

  18. 18

    在 React 与 ES6 中,constructor(prop) 不会引发错误。为什么?

  19. 19

    在 C 中,变量的多次初始化不会引发错误。为什么?

  20. 20

    传递错误类型的prop时,Typescript不会引发错误

  21. 21

    为什么在键入接收数组的函数时TypeScript 3.7.5会引发错误?

  22. 22

    startVPNTunnel不会引发错误

  23. 23

    接受参数并引发错误

  24. 24

    为什么pastespecial方法有时会引发错误1004而其他时候却不会呢?

  25. 25

    为什么`std :: prev`不会在`std :: unordered_set`的迭代器中引发错误?

  26. 26

    当数组必须为某种类型时,为什么flowjs不会在空数组上引发错误?

  27. 27

    为什么pastespecial方法有时会引发错误1004而其他时候却不会呢?

  28. 28

    为什么Gradle在缺少的项目属性上引发错误

  29. 29

    为什么此Java转换会引发错误?

热门标签

归档