" =>"的含义是什么?在TypeScript? (胖箭)

时间:2015-12-14 18:54:35

标签: typescript

我刚开始学习TypeScript,我看到有很多代码使用这个sytax =>。我通过阅读Specification of TypeScript Version 1.6和一些谷歌搜索做了一些研究。我仍然无法理解=>的含义。 对我来说,感觉就像是C ++中的指针。但我无法证实。如果有人可以解释以下示例,那将是很好的。谢谢!

以下是我在阅读Typescript规范时发现的示例:

对象类型

var MakePoint: () => {  
    x: number; y: number;  
};

问题:这段代码在做什么?创建一个名为 MakePoint 的对象,其中x和y字段是数字类型?这是 MakePoint 的构造函数还是函数?

功能类型

function vote(candidate: string, callback: (result: string) => any) {  
 // ...  
}

问题:=> any的含义是什么?你必须返回一个字符串类型?

有人能用简单的英语向我解释这些例子的区别或目的吗?谢谢你的时间!

8 个答案:

答案 0 :(得分:76)

也许您将类型信息与函数声明混淆。如果你compile the following

var MakePoint: () => {x: number; y: number;};

你会看到它产生:

var MakePoint;

在TypeScript中,:之后但=(赋值)之前的所有内容都是类型信息。所以你的例子是说MakePoint的类型是一个函数,它接受0个参数并返回一个具有两个属性xy的对象,两个数字。它没有为该变量分配函数。相反,编译:

var MakePoint = () => 1;

产生

var MakePoint = function () { return 1; };

请注意,在这种情况下,=>胖箭头位于赋值运算符之后。

答案 1 :(得分:25)

在类型位置,=>定义一个函数类型,其中参数位于=>的左侧,返回类型位于右侧。所以callback: (result: string) => any表示" callback是一个类型为函数的参数。该函数接受一个名为result string的{​​{1}}参数,该函数的返回值为any"。

对于表达式级别构造,请参阅What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?

答案 2 :(得分:18)

var MakePoint: () => {  
    x: number; y: number;  
};

MakePoint是一个变量。它的类型是一个不带参数并产生数字x和y的函数。现在箭头有意义吗?

答案 3 :(得分:9)

  

作为一个聪明人曾经说过“我讨厌JavaScript,因为它很容易失去这个意思”。

它被称为胖箭头(因为->是一个细箭头而=>是一个胖箭头),也称为 lambda函数(因为其他语言)。另一个常用功能是胖箭头函数()=>something。胖箭的动机是:

  1. 您无需继续输入function
  2. 它在词汇上捕捉this
  3. 的含义
  4. 它在词汇上捕捉arguments
  5. 的含义
    function Person(age) {
    this.age = age;
    this.growOld = function() {
        this.age++;
      }
    }
    
    var person = new Person(1);
    setTimeout(person.growOld,1000);
    
    setTimeout(function() { console.log(person.age); },2000); // 1, should have been 2
    

    如果你在浏览器中运行这个代码,那么函数中的代码将指向window,因为window将执行growOld函数。修复是使用箭头功能:

    function Person(age) {
    this.age = age;
    this.growOld = () => {
        this.age++;
      }
    }
    var person = new Person(1);
    setTimeout(person.growOld,1000);
    
    setTimeout(function() { console.log(person.age); },2000);// 2
    

答案 4 :(得分:5)

它被称为"胖箭"。它被添加到EcmaScript6中并替换了function关键字等。

可以阅读更多内容here

答案 5 :(得分:3)

直接来自OP中的链接:

  

在此示例中,'vote'的第二个参数具有函数类型

     

(结果:字符串)=>任何   这意味着第二个参数是一个函数返回类型'any',它有一个名为'result'的'string'类型的参数。

答案 6 :(得分:0)

只需使用它即可代替匿名函数。

下面的代码

function(argument){
return argument. Length
}

将转换为argument => {argument.length};

为更好地理解,请参考以下内容: https://codecraft.tv/courses/angular/es6-typescript/arrow/

答案 7 :(得分:0)

这是一个箭头功能,也就是胖箭头功能。

了解更多: enter link description here