2013-04-25 13 views
5

Se ho questo ts modulo:implementazione tipografico AMD male con Javascript/RequireJS

export function say(){ 
    console.log("said"); 
} 

e compilo con l'opzione amd posso usarlo abbastanza facilmente da un client ts:

import foo = module("tsmodule") 
foo.say(); 

export var x = 123; 

Tuttavia, se devo javascript equivalente al modulo ts:

define(["require", "exports"], function(require, exports) { 
    function say() { 
     console.log("said"); 
    } 
    exports.say = say; 
}) 

non v'è alcun modo per utilizzare facilmente. La soluzione più semplice possibile:

// of course you can use .d.ts for requirejs but that is beside the point 
declare var require:any; 

// will fail with error module has not been loaded yet for context 
// http://requirejs.org/docs/errors.html#notloaded 
var useme = require("jsmodule") 
useme.say(); 

export var x = 123; 
import foo = module("tsmodule") 
foo.say(); 

non riesce a causa di un errore http://requirejs.org/docs/errors.html#notloaded. Poiché "jsmodule" non è stato passato alla chiamata define nel dattiloscritto generato.

Le due soluzioni Ho

  • non utilizzare l'importazione/esportazione (caratteristiche del linguaggio perse)
  • uso richiede ([]) (ancora non può esportare qualcosa che dipende dalla require ([ ]) chiamata)

hanno limitazioni: https://github.com/basarat/typescript-requirejs. C'è un altro modo? Se non è possibile votare qui: https://typescript.codeplex.com/workitem/948 :)

risposta

3

Se si desidera caricare in un modulo JavaScript si può sempre utilizzare il (mal documentato) amd-dependency tag:

/// <amd-dependency path="jsmodule" /> 

Questo metterà jsmodule nella matrice delle dipendenze della tua chiamata definita.

e quindi fornire un file di dichiarazione in cui si sarebbe semplicemente affermare

module useme { 
    function say(): void; 
} 
+1

apparentemente una funzionalità non documentata, e non funziona con la mia versione TSC 0.9.0 alpha. Fammi disinstallare/installare alla versione 0.8 – basarat

+0

Aww shoot, hanno rimosso questo in 0.9 ?! Sto usando 0.8.1.1. – thomaux

+2

Funziona in 0.8.3. Ma non in 0.9.0alpha – basarat