2017-09-14 2 views
1

J'étend l'objet Number, donc il y aura une fonction toKM() qui convertira la distance (donnée en mètres) en Kilomètres.Comportement impair de type typographique s'étendant Numéro

Lorsque j'utilise la syntaxe suivante (dont IMO est la valeur par défaut pour Typescript), la fonction ne fonctionne pas.

interface Number { 
 
    toKM(): number 
 
} 
 

 
Number.prototype.toKM =() => { 
 
    return this/1000 
 
} 
 

 
let alfa = 3456 
 
document.write(alfa.toKM())

Quand j'utilise la forme "traditionnelle":

interface Number { 
 
    toKM(): number 
 
} 
 

 
Number.prototype.toKM = function() { 
 
    return this/1000 
 
} 
 

 
let alfa = 3456 
 
document.write(alfa.toKM())

est-il un cas particulier que la nouvelle syntaxe ne fonctionne pas?

Répondre

3

Si vous utilisez une fonction de flèche Tapuscrit captera ce dans le contexte de la déclaration, votre code est compilé pour cela si vous ciblez ci-dessous ES6:

var _this = this; 
Number.prototype.toKM = function() { 
    return _this/1000; 
}; 

fonctions Arrow aurait pas travaillé événement si vous deviez utiliser JS pur (es2015 ou plus) car leur comportement serait équivalent au JS ci-dessus.

Vous devez utiliser une fonction régulière et spécifier le type de this

Number.prototype.toKM = function(this: number) { 
    return this/1000 
} 
+0

Ce n'est pas seulement une chose tapuscrit si vous compilez à ES6 et utiliser les fonctions réelles fléchées, vous obtiendrez la même chose. –

+0

@NitzanTomer vous avez raison, j'étais en mode TS et je ne pensais pas à JS, ajouté la clarification –

+0

@NitzanTomer TSC compile le code avec "target": "es6". –