能否将一个Typescript导入到正在运行的ts-node REPL实例中?

4

我希望测试一些我写的 TypeScript 代码。

目前,我知道的最好的方法是运行 ts-node my-file-name.ts

然而,我想让它更加交互,类似于 Python REPL 允许您导入模块,然后从 REPL 中随意调用函数。

例如,一个会话可能如下所示:

$ ts-node
> import my-file-name.ts
> myFunctionFromMyFile("specialParam")
> "you just called a function from my-file-name.ts with param specialParam"

这是否可以通过ts-node实现?
2个回答

10
我发现一种实现这个目标的方法如下:

首先,我们需要创建一个可以处理输入数据的函数。例如:

$ ts-node
> import * as abc from './my-file'
> abc.myFunction()
> "works!"

很好!非常感谢。 - Vinicius Carvalho
5
请注意,如果你在编译选项中设置了 noUnusedLocals,目前这个方法将无法工作。请参考 https://github.com/TypeStrong/ts-node/issues/850。解决方法是运行 ts-node -O '{"noUnusedLocals": false}' (确保选项名使用双引号)来启动 REPL。 - Katie Byers
2
我得到:无法在Node.js REPL内使用import语句,可以选择使用动态导入。 参见:https://stackoverflow.com/questions/73073219/ts-node-cant-use-dynamic-imports-or-import-statements-while-in-repl-or-eval-in - Jørgen Tvedt
2
不行,这个已经不起作用了。 - skrat

2

如果您需要在每个REPL会话中自动导入某些内容,您可以将您的应用程序暴露在一个文件中,然后在该文件中使用repl.start。例如,创建像这样的console.ts文件:

import repl from 'repl';
import * as models from './models';

Object.keys(models).forEach((modelName) => {
  global[modelName] = models[modelName];
});

const replServer = repl.start({
  prompt: 'app > ',
});

replServer.context.db = models;

使用以下命令运行控制台:

$ node --require ts-node/register/transpile-only --experimental-repl-await console

更多详情请点击这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接