【问题标题】:"Function Types", What's the difference and why are they useful?“功能类型”,有什么区别,为什么有用?
【发布时间】:2017-07-23 04:19:30
【问题描述】:

https://www.typescriptlang.org/docs/handbook/functions.html 的 TS 文档中,引入了“函数类型”。这样一个例子的代码是:

let myAdd: (x: number, y: number) => number =
    function(x: number, y: number): number { return x+y; };

“非类型化”函数在哪里

let myAdd = function(x: number, y: number): number { return x+y; };

对我来说,第一个示例中的额外语法很奇怪。为什么返回类型有箭头函数语法?为什么有两种参数规格?

【问题讨论】:

    标签: typescript typescript2.4


    【解决方案1】:

    如果在声明变量时不知道函数是什么,键入函数很有用:

    let myOperation: (x: number, y: number) => number;
    
    if ( // some condition ) {
      myOperation = function (x: number, y: number): number { return x + y; };
    } else {
      myOperation = function (x: number, y: number): number { return x * y; }
    }
    

    请注意,在某些地方(例如接口),您可以使用或不使用箭头来描述类型:

    interface WithoutArrow {
      operation(x: number, y: number): number;
    }
    
    interface WithArrow {
      operation: (x: number, y: number) => number;
    }
    

    【讨论】:

    • 那将是唯一合理的用例吗?
    • @user7722867 在其他地方您可能需要键入函数(例如在接口中创建类型化方法,或者为本身是函数的函数创建类型化参数等)。在某些地方,您不需要箭头来描述类型,例如在界面中。我更新了我的答案。
    • 这个答案总体上不错,但请注意箭头会产生相当大的语义差异
    • @AluanHaddad 在接口定义中,会有什么区别?
    • @AluanHaddad 如果我理解正确,您将接口中的方法解释为暗示实现是否应该是箭头函数?我从来没有真正看到过这种情况,因为我认为接口只是为了定义签名而不是关于它们是如何实现的,所以我认为 TypeScript 只是为我们提供了多种编写方法签名的方法。不过有趣的一点是,正如您提到的,类中的箭头函数不会最终出现在原型上。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2010-10-02
    • 2011-04-17
    • 1970-01-01
    • 2014-02-12
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多