介绍
Node 是一个运行环境,可以编写服务器端 JavaScript。自2011年发布以来,它已获得广泛采用。由于JavaScript语言的性质:动态和弱类型,导致编写服务器端JavaScript因为代码库的增长可能具有挑战性。
从其他语言使用JavaScript的开发人员经常抱怨它缺乏强大的静态类型,但这就是TypeScript有了用武之地之一的地方,它弥补了这一弱点。
TypeScript 是一个类型化的 JavaScript 超集,可以帮助构建和管理大型 JavaScript 项目。它可以被认为是具有其他功能的JavaScript,如强静态类型,编译和面向对象编程。
注: 从技术上讲, Typescript是JavaScript的超集,这就意味着所有的JavaScript代码都是有效的Typescript代码。
此处列出了一些使用TypeScript的好处:
- 可选的静态类型。
- 类型接口。
- 使用接口的能力。
在本教程中,你将用TypeScript设置一个Node的项目,构造一个Express的应用并把它转译成JavaScript代码。
前提条件
在你开始之前,你需要已经安装了Nodejs环境。Nodejs的安装,你可以在通过https://nodejs.org/en/docs/参考如何在不同的平台上安装。
第一步----初始化一个项目
首先,创建一个目录,命名为’node_project’并进入这个目录下
mkdir node_project
cd node_project
接着初始化为一个npm的项目:
npm init -y
-y标志告诉npm init自动使用默认的设置。你可以在以后通过package.json文件更改。
第二步----配置Typescript编译器
你已经初始化了你的node项目,现在准备安装和设置Typescript。
在你的项目目录中运行下面的命令安装typescript:
npm install –save-dev typescript
输出如下:
added 1 package, and audited 2 packages in 1m
found 0 vulnerabilities
Typescript用tsconfig.json来配置项目的编译选项。在项目的根目录下创建文件tsconfig.json,并粘贴下面的内容到文件中:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
},
"lib": ["es2015"]
}
上面JSON文件中一些键名的含义解释如下:
module:指定模块代码生成的方法。Node使用commonjs。
target:指定输出语言的版本级别。
moduleResolution:帮助编译器知道从哪里查找和导入模块。值‘node’表明使用Node模块的方式。
outDir:编译成JS文件的存放位置。
如想要知道更详细的键值的含义,可以参考typescript的文档。
第三步----创建一个最小化的Express服务器
现在需要安装和创建一个最简单的Express服务器。
npm install –save express@4.17.1
npm install –save-dev @types/express@4.17.1
第二个安装命令是安装Express的types模块,用来支持typescript。在Typescript中,types是用文件定义,通常是以.d.ts后缀结尾。这些文件提供了一个框架的一些类型信息。本例中是Express框架。
这个模块是必需的。因为Typescript和Express是相互独立的包。没有@types/express包,typescript就没有办法识别Express的一些类型。
下一步,创建一个src的目录,并在src的目录下创建app.ts文件,然后拷贝粘贴下面的内容:
import express from 'express';
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
return console.log(`Express is listening at http://localhost:${port}`);
});
上面的代码创建了一个Express服务器,在端口3000侦听客户端的请求。在运行服务器之前,你需要先用下面的命令把它编译成JS文件:
npx tsc
这个命令用前面创建的配置文件tsconfig.json来编译代码和放置编译结果到输出目录。本例中的输出目录名是dist。启动服务器:
node dist/app.js
如果启动成功,你将在命令窗口看到输出:
Express is listening at http://localhost:3000
在浏览器中输入localhost:3000,你将看到输出信息:
Hello world!
至此,你已经成功地在你的node项目中使用Typescript。下一步,你将设置eslint来规范和检测typescript代码中的错误。
第四步----配置Typescript使用eslint
Eslint是语法规则和代码风格的检查工具。特别是在多人协同开发时,能保持代码风格一致,检查语法和优化代码,降低运行时出现错误的概率。
首先我们将安装eslint包:
npm install –save-dev eslint
接着运行eslint的初始化命令,交互式的设置你的项目:
npx eslint --init
它将询问下面几个问题,本例子的回答如下:
你想如何使用ESLint?: 检查语法和发现的问题
你的项目使用什么类型的模块?: JavaScript modules (import/export)
你的项目使用哪种框架?: None of these
你的项目使用TypeScript吗?: Yes
你的代码在哪里行?: Node
你希望你的配置文件时什么格式的?: JavaScript
最后,根据你的回答,命令将询问是否安装所需要的一些依赖包,选择yes,它将安装eslint所需要的支持包。
安装完成后,它会在项目的根目录下生成一个文件.eslintrc.js,里面包含如下内容:
module.exports = {
"env": {
"node": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 13,
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
}
};
运行eslint来检查所有的以.ts后缀结尾的文件。
npx eslint . –ext .ts
现在你已经设置了eslint来检查你的typescript语法。下一步你将更新的npm配置,在里面添加一些方便运行lint和启动项目的脚本。
打开package.json, 更新如下(文字加粗部分):
{
"name": "node_project",
"version": "1.0.0",
"description": "",
"main": "dist/app.js",
"scripts": {
"start": "tsc && node dist/app.js",
"lint": "eslint . --ext .ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/express": "^4.17.13",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"@typescript-eslint/parser": "^5.4.0",
"eslint": "^8.3.0",
"typescript": "^4.5.2"
},
"dependencies": {
"express": "^4.17.2"
}
}
上面的更新中,添加了main,scripts中的start和lint,以便于编译,检查和运行你的项目。例如,运行
npm start
它将先编译typescript代码为JS代码,然后运行生成的JS代码。
结论
在本教程中,介绍了如何用Typescript快速开始构建一个Node项目,如何用tsconfig.json配置Typescript的编译选项,如何使用命令转译以.ts结尾的文件成js文件以及使用eslint检查Typescript语法等。在此基础上,你可以构建复杂的,强类型,健壮的NodeJS应用。