2014-05-07 6 views
0

Quelle est la différence formelle entre les types de ces deux variables dans TypeScript?TypeScript: différence entre les types de fonction

var randomStringId =() => Math.random().toString(36).substr(2, 9); 
function randomStringId2() { 
    return Math.random().toString(36).substr(2, 9); 
} 

randomStringId est de type () => string. randomStringId2 a le type (): string. Sont-ils différents? Si oui, comment? Ou est-ce juste mon IDE montrant différemment deux types qui sont fondamentalement les mêmes?

+1

Pour comprendre la syntaxe lambda: https://www.youtube.com/watch?v=tvocUcbCupA&hd=1 – basarat

+0

Vous devez faire attention car la première est une variable contenant une fonction, et la seconde est définie fonctionner lui-même. '' randomStringId2'' peut être utilisé AVANT sa déclaration, alors que '' randomStringId'' ne peut pas. Il s'agit de différences JavaScript pur et puisque TypeScript est un sur-ensemble de JavaScript, il hérite de cette différence. –

Répondre

3

Vos fonctions sont les mêmes. Cependant, ces deux fonctions ne sont pas:

var getX =() => this.x 

function getX() { 
    return this.x 
} 

regarder le code js généré:

var _this = this; 
var getX = function() { 
    return _this.x; 
}; 

function getX() { 
    return this.x; 
} 

La fonction définie avec la notation flèche () => capture la référence à this lorsqu'elle est définie.

1

Absolument aucune différence dans les Types. Les deux sont exactement les mêmes. Ils ne prennent rien et retournent une chaîne.

Voici la preuve:

interface Foo1{ 
    foo:()=>string; 
} 
interface Foo2{ 
    foo():string; 
} 
var foo1:Foo1; 
var foo2:Foo2; 
foo1 = foo2 = foo1; 

Cependant, il y a une différence dans la façon dont ils se comportent . Pour comprendre le besoin d'une fonction lambda ()=>: http://youtube.com/watch?v=tvocUcbCupA&hd=1

Questions connexes