2013-03-16 9 views
11

Non capisco cosa sto facendo male. Ho creare un progetto tipografico in VS2012, e creato un file denominato "Vector.ts", in una sotto-directory chiamata "fisica":TypeScript - Il modulo non è definito a runtime

// Module 
module Physics { 

    // Class 
    export class Vector { 
     constructor(public x: number) { } 
    } 

} 

Inoltre, ho il seguente file app.ts:

/// <reference path="Physics/Vector.ts" /> 

window.onload =() => { 
    var vector = new Physics.Vector(6); 
}; 

il progetto è stato compilato con successo, ma quando lo lancio, ottengo la seguente eccezione:

0x800a1391 - JavaScript runtime error: 'Physics' is undefined

non capisco che cosa sono io che faccio male ...

Grazie.

risposta

5

Se si utilizzano moduli stile AMD con un caricatore di moduli come Require.Js, è necessaria una dichiarazione di importazione. Vedi risposta accettato di Steve qui: https://stackoverflow.com/a/14919495/1014822 Il codice sarà simile:

import Physics = module("Physics/Vector"); 

var vector = new Physics.Vector(6); 

... e non avrete bisogno di questo: /// <reference path="Physics/Vector.ts" />

Se non si utilizza un caricatore di modulo, è sufficiente assicurati di includere il tuo file di output Vector.js da qualche parte nella pagina html e assicurati che venga caricato prima del file dell'app. In questo caso, usi /// <reference path="Physics/Vector.ts" /> per dire a TS dove trovare il tuo modulo per intellisense ecc. Per funzionare.

+0

Grazie per la risposta. Come posso assicurarmi che il mio file Vector.js venga caricato prima di app.js? – gipouf

+0

Appena trovato un bel tutorial su di esso - http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/. – gipouf

1

Solo per completezza, se si sta utilizzando System allora devi usare il importfunction:

System.import("Physics/Vector"); 

Se stai facendo questo per Angular 2 allora che ci si vuole fare questo prima bootstrapimport