Answers:
我如何用Typescript做同样的事情
您可以将tsc使用表模式下运行tsc -w -p .,它会产生.js在现场的时尚你的文件,这样你就可以运行node foo.js像正常
有ts-node:https : //github.com/TypeStrong/ts-node,它将即时编译代码并通过node run运行它
npx ts-node src/foo.ts
test.ts,从未编译过,并且只有一行代码:console.log('hello');在其中。我是node test.ts从命令行运行的,它可以输出“ hello”,这使我感到困惑。好吧,如果该文件是纯有效的JavaScript并且您运行node myFile.ts它仍然可以正常工作。但这不是一个好用例,因为我添加TypeScript代码的那一刻,在尝试运行它时出现了错误,这是我所期望的。我希望节点在运行.ts文件时会发出警报/错误。
npm install -g ts-node做ts-node your-script.ts一件轻而易举的。
我们有以下步骤
首先,您需要安装打字稿
npm install -g打字稿
2.创建一个文件helloworld.ts
function hello(person){
return "Hello, " + person;
}
let user = "Aamod Tiwari";
const result = hello(user);
console.log("Result",result)
3.打开命令提示符,然后键入以下命令
tsc helloworld.ts
节点helloworld.js
要添加到上面的@Aamod答案中,如果要使用一个命令行来编译和运行代码,则可以使用以下命令:
视窗:
tsc main.ts | node main.js
Linux / macOS:
tsc main.ts && node main.js
npm install typescript -g安装tscCLI
运行以下命令并全局安装所需的软件包:
npm install -g ts-node
npm install -g typescript
现在运行以下命令来执行打字稿文件:
ts-node typescript-file.ts
ts-node它还提供TypeScript REPL。
npx ts-node yourscript.ts如果您不想使用全局版本,也可以依靠。
其他答案都没有讨论如何运行使用模块(尤其是现代ES模块)的TypeScript脚本。
首先,截至2020年3月,ts-node在这种情况下不起作用。因此,我们将接受tsc之后node。
其次,TypeScript仍然无法输出.mjs文件。因此,我们会满足于.js文件和"type": "module"在package.json。
第三,您需要干净的import行,而无需指定.js扩展名(这在.ts文件中会造成混淆):
import { Lib } from './Lib';
好吧,这是不平凡的。Node 要求在导入上指定扩展名,除非您使用该experimental-specifier-resolution=node标志。在这种情况下,它将使Node能够查找Lib.js或Lib/index.js仅./Lib在import在行。
第四,仍然存在一个障碍:如果main文件名与index.js软件包中的文件名不同,Node将找不到它。
与运行普通Node相比,转堆使事情变得更加混乱。
这是具有现代TypeScript项目结构的示例存储库,可生成ES模块代码。
就像Zeeshan Ahmad的回答一样,我也认为ts-node是要走的路。我还将添加一个shebang并使它可执行,因此您可以直接运行它。
全局安装typescript和ts-node:
npm install -g ts-node typescript
要么
yarn global add ts-node typescript创建hello具有以下内容的文件:
#!/usr/bin/env ts-node-script
import * as os from 'os'
function hello(name: string) {
return 'Hello, ' + name
}
const user = os.userInfo().username
console.log(`Result: ${hello(user)}`)
如您所见,第一行具有ts-node的shebang
只需执行文件即可直接运行
$ ./hello
Result: Hello, root一些注意事项:
更新2020-04-06:在评论中进行了大量输入后发生了一些变化:更新了shebang以使用ts-node-script而不是ts-node,链接到ts-node中的问题。
#!/usr/bin/env ts-node-script(也是ts-node)似乎在此方面更胜一筹。如果您想链接脚本(例如使用npm link),则事情会变得更加复杂,因为的脚本模式ts-node(尚未?)不遵循符号链接。我#!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.json最终还是同意了。
万一像我这样的人疯了,只想像.js脚本一样运行打字稿脚本,可以尝试一下。我编写了一个hacky脚本,该脚本似乎使用node执行.ts脚本。
#!/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。
ts-node全局安装节点模块。node在命令行中使用以在文件js文件下运行(路径用于Windows,但您也可以在Linux中执行此操作)
~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.jsts文件路径作为命令行参数。