If I have this ts module:
export function say(){
console.log("said");
}
and I compile it with the amd option I can use it quite easily from a ts client :
import foo = module("tsmodule")
foo.say();
export var x = 123;
However if I have javascript equivalent to the ts module:
define(["require", "exports"], function(require, exports) {
function say() {
console.log("said");
}
exports.say = say;
})
There is no way to use it easily. The simplest possible solution:
// 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();
fails because of error http://requirejs.org/docs/errors.html#notloaded . Since "jsmodule" was not passed to the define call in the generated typescript.
The two workarounds I have
have limitations : https://github.com/basarat/typescript-requirejs . Is there another way? If not can you vote here : https://typescript.codeplex.com/workitem/948 :)
If you want to load in a JavaScript module you could always use the (badly documented) amd-dependency
tag:
/// <amd-dependency path="jsmodule" />
This will put jsmodule
in the dependency array of your define call.
And then provide a declaration file in which you would simply state
module useme {
function say(): void;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With