/ / Problème de portée Typescript avec la fonction auto-exécutable anonyme - TypeScript

Problème de portée de typographie avec une fonction automatique à exécution automatique - dactylographie

J'ai testé le nouveau dactylographie avec VS 2012, mais j'ai ce problème dans mon premier projet:

J'ai collé ce JS dans mon fichier ts mais je ne peux pas accéder à l'objet Sprite est son dans la portée anonyme. Comment puis-je y accéder à partir de dactylographié.

(function () {
function LoaderProxy() {
return {
draw: $.noop,
fill: $.noop,
frame: $.noop,
update: $.noop,
width: null,
height: null
};
}

function Sprite(image, sourceX, sourceY, width, height) {
sourceX = sourceX || 0;
sourceY = sourceY || 0;
width = width || image.width;
height = height || image.height;

return {
draw: function(canvas, x, y) {
canvas.drawImage(
image,
sourceX,
sourceY,
width,
height,
x,
y,
width,
height
);
},

fill: function(canvas, x, y, width, height, repeat) {
repeat = repeat || "repeat";
var pattern = canvas.createPattern(image, repeat);
canvas.fillColor(pattern);
canvas.fillRect(x, y, width, height);
},

width: width,
height: height
};
};

Sprite.load = function(url, loadedCallback) {
var img = new Image();
var proxy = LoaderProxy();

img.onload = function() {
var tile = Sprite(this);

$.extend(proxy, tile);

if(loadedCallback) {
loadedCallback(proxy);
}
};

img.src = url;

return proxy;
};

var spriteImagePath = "images/";

window.Sprite = function(name, callback) {
return Sprite.load(spriteImagePath + name + ".png", callback);
};
window.Sprite.EMPTY = LoaderProxy();
window.Sprite.load = Sprite.load;
}());

J'espère que cela explique mon problème!

Merci pour toute aide

Réponses:

0 pour la réponse № 1

La première erreur que le compilateur vous donne est ici ...

Sprite.load

Il détecte qu'il n'y a aucune propriété ou fonction sur l'objet Sprite appelé load.

La deuxième erreur est là ...

var tile = Sprite(this);

Le constructeur Sprite prend cinq paramètres et vous n'en avez passé que 1.

Troisièmement ...

window.Sprite

L'objet Window n'a pas de propriété nommée Sprite.

Tous les autres problèmes sont des variantes de ce problème.

Voici une suggestion pour que les choses fonctionnent avec des changements minimes. La meilleure solution serait de réécrire votre Sprite en tant que classe dans TypeScript

var Sprite;

(function () {
function LoaderProxy() {
return {
draw: $.noop,
fill: $.noop,
frame: $.noop,
update: $.noop,
width: null,
height: null
};
}

Sprite = function (image, sourceX, sourceY, width, height) {
sourceX = sourceX || 0;
sourceY = sourceY || 0;
width = width || image.width;
height = height || image.height;

return {
draw: function(canvas, x, y) {
canvas.drawImage(
image,
sourceX,
sourceY,
width,
height,
x,
y,
width,
height
);
},

fill: function(canvas, x, y, width, height, repeat) {
repeat = repeat || "repeat";
var pattern = canvas.createPattern(image, repeat);
canvas.fillColor(pattern);
canvas.fillRect(x, y, width, height);
},

width: width,
height: height
};
};

Sprite.load = function(url, loadedCallback) {
var img = new Image();
var proxy = LoaderProxy();

img.onload = function() {
var tile = Sprite(this);

$.extend(proxy, tile);

if(loadedCallback) {
loadedCallback(proxy);
}
};

img.src = url;

return proxy;
};

var spriteImagePath = "images/";

Sprite = function(name, callback) {
return Sprite.load(spriteImagePath + name + ".png", callback);
};
Sprite.EMPTY = LoaderProxy();
Sprite.load = Sprite.load;
}());