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