I created a foo.ts
like this:
class Foo{
public echo(){
console.log("foo");
}
}
And it outputs javascript code like this:
var Foo = (function () {
function Foo() {
}
Foo.prototype.echo = function () {
console.log("foo");
};
return Foo;
})();
I want to call echo
function in nodejs REPL, but it ends up a error like this:
$ node
> require('./foo.js');
{}
> f = new Foo
ReferenceError: Foo is not defined
at repl:1:10
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.EventEmitter.emit (events.js:98:17)
at emitKey (readline.js:1095:12)
How can I instantiate the class and call the function echo
?
Node.js does not have a leaky global like the browser window
object.
To use TypeScript code in node.js you need to use commonjs and export the class i.e.
class Foo{
public echo(){
console.log("foo");
}
}
export = Foo;
Then in the REPL:
$ node
> var Foo = require('./foo.js');
{}
> f = new Foo();
To learn more about AMD / CommonJS : https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
Update for modern times: You can use ES modules easily thanks to esm:
export class Foo{
public echo(){
console.log("foo");
}
}
In the REPL:
$ node -r esm
> import { Foo } from './foo.js';
{}
> f = new Foo();
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