最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to use Typescript class in Nodejs REPL? - Stack Overflow

programmeradmin0浏览0评论

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?

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?

Share Improve this question asked Jun 14, 2014 at 8:05 ironsandironsand 15.3k18 gold badges89 silver badges188 bronze badges 1
  • 2 I'm not sure how typescript works, but it's clear that you are not exporting anything from Foo.js (and you are not assign the required module to anything). Maybe make yourself familiar either Node's module system first. – Felix Kling Commented Jun 14, 2014 at 8:09
Add a ment  | 

2 Answers 2

Reset to default 4

Node.js does not have a leaky global like the browser window object.

To use TypeScript code in node.js you need to use monjs 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./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();
发布评论

评论列表(0)

  1. 暂无评论