2013-04-25 14 views
5

Jeśli mam to ts moduł:realizacja Typescript AMD złe z JavaScript/RequireJS

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

i skompilować go z opcją amd mogę go używać dość łatwo z klientem TS:

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

export var x = 123; 

jednak jeśli mam javascript odpowiednik modułu tS:

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

nie ma sposobu, aby go używać łatwo. Najprostsze z możliwych rozwiązań:

// 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(); 

nie powiodło się z powodu błędu http://requirejs.org/docs/errors.html#notloaded. Ponieważ "jomoduł" nie został przekazany do wywołania zdefiniowanego w wygenerowanym maszynopisie.

Dwa obejścia mam

  • nie używać import/eksport (Funkcje językowe utracone)
  • użycie require ([]) (wciąż nie może eksportować coś, co zależy od require ([ ]) call)

mają ograniczenia: https://github.com/basarat/typescript-requirejs. Czy istnieje inny sposób? Jeśli nie można głosować tutaj: https://typescript.codeplex.com/workitem/948 :)

Odpowiedz

3

Jeśli chcesz, aby załadować moduł JavaScript zawsze można użyć (źle udokumentowane) amd-dependency tag:

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

To położy jsmodule w tablicy zależności twojego zdefiniowania połączenia.

a następnie dostarczyć plik deklarację, w której byś po prostu stwierdzić

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

najwyraźniej nieudokumentowane funkcję, a nie działa z moją wersją TSC 0.9.0 alfa. Pozwól mi odinstalować/zainstalować wersję 0.8 – basarat

+0

Aww strzelać, usunęli to w 0.9 ?! Używam wersji 0.8.1.1. – thomaux

+2

Działa w wersji 0.8.3. Ale nie w 0.9.0alpha – basarat