我刚开始学习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
的含义是什么?你必须返回一个字符串类型?
有人能用简单的英语向我解释这些例子的区别或目的吗?谢谢你的时间!
答案 0 :(得分:76)
也许您将类型信息与函数声明混淆。如果你compile the following:
var MakePoint: () => {x: number; y: number;};
你会看到它产生:
var MakePoint;
在TypeScript中,:
之后但=
(赋值)之前的所有内容都是类型信息。所以你的例子是说MakePoint的类型是一个函数,它接受0个参数并返回一个具有两个属性x
和y
的对象,两个数字。它没有为该变量分配函数。相反,编译:
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
。胖箭的动机是:
function
。this
。arguments
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)
这是一个箭头功能,也就是胖箭头功能。