我居然很难找到这个问题的答案。使用普通node .js,你可以运行任何节点路径为/to/file.js的js文件,使用CoffeeScript它是coffee hello。咖啡和ES6有babel节点hello.js。我如何用Typescript做同样的事情?

我的项目有一个tsconfig。Webpack/ts-loader使用它来为浏览器构建一个漂亮的小bundle。在此之前,我需要从控制台运行一个构建步骤,不过,这将使用项目中使用的一些.ts文件来生成模式,但我似乎无法在不编译整个项目的情况下运行单个Typescript文件。


当前回答

为了补充上面的@Aamod答案,如果你想使用一个命令行来编译和运行你的代码,你可以使用以下命令行:

窗口:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

其他回答

这个答案可能为时过早,但是deno支持开箱即用地运行TS和JS。

基于您的开发环境,迁移到Deno(并学习它)可能会太多,但希望这个答案在未来能帮助到某些人。

只是一些有用的信息——这里是最新的TypeScript / JavaScript运行时Deno。

它是由节点的创造者瑞恩·达尔创造的,基于如果他可以重新开始,他会做不同的事情。

为自己编写一个简单的bash包装器可能会有所帮助。

#!/bin/bash
npx tsc $1 && node ${1%%.ts}

如果有人像我一样疯狂,想要像运行.js脚本一样运行typescript脚本,你可以试试这个。我编写了一个使用node执行.ts脚本的hack脚本。

#!/usr/bin/env bash

NODEPATH="$HOME/.nvm/versions/node/v8.11.3/bin" # set path to your node/tsc

export TSC="$NODEPATH/tsc"
export NODE="$NODEPATH/node"

TSCFILE=$1 # only parameter is the name of the ts file you created.

function show_usage() {
    echo "ts2node [ts file]"
    exit 0
}

if [ "$TSCFILE" == "" ]
then
    show_usage;
fi

JSFILE="$(echo $TSCFILE|cut -d"." -f 1).js"

$TSC $TSCFILE && $NODE $JSFILE

你可以这样做,也可以自己写,但本质上,它创建了.js文件,然后使用node运行它,如下所示:

# tsrun myscript.ts

简单。只要确保您的脚本只有一个“。”,否则您将需要以不同于我所展示的方式更改JSFILE。

编辑:2022年5月

Ts-node现在有一个——esm标志。

旧的回答:

其他答案都没有讨论如何运行使用模块的TypeScript脚本,特别是现代ES模块。

首先,截至2020年3月,ts-node在这种情况下无法工作。所以我们把tsc和node放在一起。

其次,TypeScript仍然不能输出.mjs文件。因此,我们将满足于.js文件和package.json中的"type": "module"。

第三,你想要干净的导入行,而不指定.js扩展名(这在.ts文件中会令人困惑):

import { Lib } from './Lib';

这是很重要的。Node需要在导入时指定扩展,除非使用experimental- specification -resolution= Node标志。在这种情况下,当你只在导入行上指定./Lib时,它将使Node能够查找Lib.js或Lib/index.js。

第四,还有一个问题:如果包中的主文件名与index.js不同,Node将找不到它。

编译比运行普通Node要麻烦得多。

下面是一个带有现代TypeScript项目结构的示例repo,生成ES Module代码。