【问题标题】:How to use Typescript class in Nodejs REPL?如何在 Nodejs REPL 中使用 Typescript 类?
【发布时间】:2020-02-18 06:30:31
【问题描述】:

我像这样创建了foo.ts

class Foo{
    public echo(){
    console.log("foo");
    }
}

它会输出这样的javascript代码:

var Foo = (function () {
    function Foo() {
    }
    Foo.prototype.echo = function () {
        console.log("foo");
    };
    return Foo;
})();

我想在 nodejs REPL 中调用 echo 函数,但它最终会出现这样的错误:

$ 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)

如何实例化类并调用函数echo

【问题讨论】:

  • 我不确定 typescript 是如何工作的,但很明显您没有从 Foo.js 导出任何内容(并且您没有将所需的模块分配给任何内容)。不妨先熟悉一下 Node 的模块系统。

标签: javascript node.js typescript


【解决方案1】:

Node.js 没有像浏览器 window 对象那样的泄漏全局。

要在 node.js 中使用 TypeScript 代码,您需要使用 commonjs 并导出类,即

class Foo{
    public echo(){
    console.log("foo");
    }
}

export = Foo;

然后在 REPL 中:

$ node
> var Foo = require('./foo.js');
{}
> f = new Foo();

要了解有关 AMD / CommonJS 的更多信息:https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

【讨论】:

    【解决方案2】:

    现代更新:感谢esm,您可以轻松使用 ES 模块:

    export class Foo{
        public echo(){
            console.log("foo");
        }
    }
    

    在 REPL 中:

    $ node -r esm
    > import { Foo } from './foo.js';
    {}
    > f = new Foo();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2013-12-24
      • 2022-08-09
      • 1970-01-01
      • 2019-01-12
      • 2013-12-27
      • 1970-01-01
      相关资源
      最近更新 更多