【问题标题】:Why doesn't Typescript throw an error if we call a function without parenthesis?如果我们调用没有括号的函数,为什么 Typescript 不会抛出错误?
【发布时间】:2020-12-09 14:00:03
【问题描述】:

我已经在 Typescript 上工作了一段时间,并注意到了这种奇怪的行为。如果您调用不带括号的函数,Typescript 不会引发错误。它宁愿在控制台上打印整个功能。这是为什么?我在 C++ 中看不到这种行为。

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    函数是 JavaScript 中的一等成员(TypeScript 是 JavaScript 的扩展)。它们可以像数字、字符串和数组这样的任何其他表达式一样分配给变量并传递 - 只要输入正确(在 TypeScript 中)。

    const fn = () => {
      return 10;
    };
    
    const bar = fn;
    const result = bar();
    console.log(bar);
    console.log(result);

    由于console.log 允许任何参数类型,因此不禁止在 TypeScript 中记录函数。

    但是如果你试图引用函数而不调用它,当你真正需要调用它来提取返回值时,一旦你尝试使用结果,你很快就会遇到错误。例如:

    const subArr = arr.slice();
    

    创建数组的浅部分。如果你不小心这样做了

    const subArr = arr.slice;
    

    然后尝试在预期其类型为数组的任何地方使用 subArr,TypeScript 会抛出错误,因为它确定 subArr 的类型为 function,而不是类型 Array

    【讨论】:

      【解决方案2】:

      它与打字稿无关,而是 javascript 做的。它将打印您提供给控制台日志的任何内容。所以如果你给函数名不带括号,它会打印函数定义。

      【讨论】:

        猜你喜欢
        • 2019-12-09
        • 2015-02-25
        • 2021-11-21
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        相关资源
        最近更新 更多