2017-09-13 5 views
0

En utilisant le tapuscrit, je trouve pourquoi deux fonctions différentes affectées à différentes variables locales résultent en des signatures différentes. Je pensais que l'un était juste plus explicite.Pourquoi ces deux types de fonctions sont-ils différents?

let a: (number)=>number = 
    function(x: number): number {return 42;}; 

let z = function(x:number): number { return 42; }; 

> .type a 
let a: (number: any) => number 
> .type z 
let z: (x: number) => number 

Je pensais que a était juste une version plus explicite de l'écriture z, mais en quelque sorte, il devient plus généreusement typé comme accepter any.

En utilisant la version Tapuscrit 2.5.2

Répondre

3
let a: (number)=>number 

Le nom du paramètre est requis. Ceci est exactement équivalent à:

let a: (number: any)=>number 

En d'autres termes, la première number ici définit un paramètre appelé "nombre"

Qu'est-ce que vous avez besoin est,

let a: (x: number)=>number = 
    function(x: number): number {return 42;}; 

Le nom, x , n'a pas d'importance.

+0

ah, donc vous l'avez nommé, ou il est supposé être un nom avec un type de tout. C'est plutôt stupide. Et, le nom n'a pas d'importance aux fins de typochecking? –

+1

Le nom n'a pas d'importance –

+1

FWIW: Cela doit être ainsi pour maintenir la compatibilité avec JavaScript. – Pace