不小心 运行 直接使用 `node` 而不使用 `ts-node` 的 TypeScript 代码,为什么它可以工作?
Accidentally running TypeScript code directly with `node` without `ts-node`, why does it work?
我已经使用 TypeScript 建立了一个非常简单的 node.js 项目。我的package.json,从里面可以看到我安装了哪些包(没有ts-node
),看起来是这样的:
{
"name": "mydemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"lint": "eslint . --fix",
"test": "echo \"Error: no test specified\" && exit 1",
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node-fetch": "^2.6.1",
"@typescript-eslint/eslint-plugin": "^5.23.0",
"@typescript-eslint/parser": "^5.23.0",
"eslint": "^8.15.0",
"node-fetch": "^3.2.4",
"ts-node": "^10.7.0",
"typescript": "^4.6.4"
}
}
项目结构:
src/main.ts
:
const sayHi = () => {
console.log('HI!12345');
}
sayHi();
我的tsconfig.json
:
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"outDir": "dist",
"sourceMap":true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
通过以上设置,我可以在终端上运行 node src/main.ts
。每当我在 main.ts
中更新代码时,我直接 运行 node src/main.ts
也显示最新代码的结果。
我本可以安装 ts-node
,我试过了,效果也不错。但我想知道为什么没有 ts-node
我的设置工作得很好。我的意思是我已经可以通过 node
命令 运行 TypeScript 代码而无需编译为 运行 JS.
有人可以给我解释一下吗?似乎根本不需要 ts-node
。
TypeScript 语法是 JavaScript 的超集。您的代码不使用任何 TypeScript 特定语法(如类型声明或类型注释),因此它也是一个有效的 JS 文件,普通 node
可以执行。如果你添加一些类型注释,你会得到一个错误 node
:
const sayHi = (n: number) => {
console.log('HI!12345');
}
sayHi(123);
我已经使用 TypeScript 建立了一个非常简单的 node.js 项目。我的package.json,从里面可以看到我安装了哪些包(没有ts-node
),看起来是这样的:
{
"name": "mydemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"lint": "eslint . --fix",
"test": "echo \"Error: no test specified\" && exit 1",
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node-fetch": "^2.6.1",
"@typescript-eslint/eslint-plugin": "^5.23.0",
"@typescript-eslint/parser": "^5.23.0",
"eslint": "^8.15.0",
"node-fetch": "^3.2.4",
"ts-node": "^10.7.0",
"typescript": "^4.6.4"
}
}
项目结构:
src/main.ts
:
const sayHi = () => {
console.log('HI!12345');
}
sayHi();
我的tsconfig.json
:
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"outDir": "dist",
"sourceMap":true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
通过以上设置,我可以在终端上运行 node src/main.ts
。每当我在 main.ts
中更新代码时,我直接 运行 node src/main.ts
也显示最新代码的结果。
我本可以安装 ts-node
,我试过了,效果也不错。但我想知道为什么没有 ts-node
我的设置工作得很好。我的意思是我已经可以通过 node
命令 运行 TypeScript 代码而无需编译为 运行 JS.
有人可以给我解释一下吗?似乎根本不需要 ts-node
。
TypeScript 语法是 JavaScript 的超集。您的代码不使用任何 TypeScript 特定语法(如类型声明或类型注释),因此它也是一个有效的 JS 文件,普通 node
可以执行。如果你添加一些类型注释,你会得到一个错误 node
:
const sayHi = (n: number) => {
console.log('HI!12345');
}
sayHi(123);