TypeScript 4.9带来了很多新特性,配合合适的工具,可以大幅提升开发效率。
本文推荐TypeScript 4.9时代的常用工具,包括类型检查、代码生成、测试、调试、文档等方面的工具,帮你写出更好的TypeScript代码。
一、TypeScript 4.9新特性
先简单回顾一下TypeScript 4.9的新特性。
1. satisfies操作符
这是4.9最重要的新特性。
satisfies可以检查表达式是否符合某个类型,但不改变表达式的推断类型。
// 之前:用类型注解会丢失字面量类型
const config: Record<string, string | number> = {
name: 'app',
port: 3000,
}
config.name // 类型是 string | number,不是 string
// 现在:用satisfies,既检查类型,又保留字面量类型
const config = {
name: 'app',
port: 3000,
} satisfies Record<string, string | number>
config.name // 类型是 string
config.port // 类型是 numbersatisfies非常实用,推荐大家使用。
2. 自动访问器(Accessors)
class Person {
accessor name: string
constructor(name: string) {
this.name = name
}
}accessor会自动生成getter和setter,配合装饰器使用更方便。
3. 类型收窄改进
4.9改进了类型收窄:
- in操作符的类型收窄更准确
- 严格模式下的NaN检查
- Promise的resolve类型改进
4. 其他改进
- 更好的错误提示
- 更快的编译速度
- 更严格的检查
二、类型检查工具
1. tsc(TypeScript编译器)
最基础的工具,就是tsc本身。
# 类型检查
tsc --noEmit
# 编译
tsc
# watch模式
tsc --watch配置tsconfig.json:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}建议开启strict模式,从一开始就写严格的类型。
2. eslint + @typescript-eslint
ESLint配合TypeScript插件,可以做代码检查。
安装:
npm install eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev配置.eslintrc:
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }]
}
}ESLint可以发现tsc发现不了的问题,比如未使用的变量、代码风格问题。
3. type-coverage
type-coverage可以检查项目的类型覆盖率。
npx type-coverage输出:
1234 / 1500 types are covered, 82.3% coverage可以帮你发现any类型和未覆盖的地方,逐步提升类型覆盖率。
三、代码生成工具
1. ts-node
ts-node可以直接运行TypeScript文件,不需要先编译。
# 安装
npm install ts-node --save-dev
# 运行
ts-node script.ts
# 配合nodemon
nodemon --exec ts-node script.ts开发时用ts-node非常方便,不用每次都编译。
2. tsx
tsx是一个更快的TypeScript运行工具,基于esbuild。
# 安装
npm install tsx --save-dev
# 运行
tsx script.ts
# watch模式
tsx --watch script.tstsx比ts-node更快,启动速度快,适合开发时使用。
3. swc
swc是一个超快的TypeScript/JavaScript编译器,用Rust写的。
# 安装
npm install @swc/core @swc/cli --save-dev
# 编译
swc src --out-dir distswc的编译速度比tsc快很多,适合大型项目。但swc只做语法转换,不做类型检查,类型检查还是要用tsc。
4. esbuild
esbuild也是一个超快的打包工具,支持TypeScript。
# 安装
npm install esbuild --save-dev
# 打包
esbuild src/index.ts --bundle --outfile=dist/index.js --platform=nodeesbuild速度极快,适合构建工具和开发服务器。
四、测试工具
1. Jest + ts-jest
Jest是最流行的测试框架,配合ts-jest可以测试TypeScript。
# 安装
npm install jest ts-jest @types/jest --save-dev
# 初始化
npx ts-jest config:initjest.config.js:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
}写测试:
import { sum } from './math'
test('sum adds two numbers', () => {
expect(sum(1, 2)).toBe(3)
})2. Vitest
Vitest是一个新的测试框架,基于Vite,速度快,支持TypeScript。
# 安装
npm install vitest --save-dev
# 运行
vitest
# 单次运行
vitest run写测试:
import { describe, it, expect } from 'vitest'
import { sum } from './math'
describe('math', () => {
it('sum adds two numbers', () => {
expect(sum(1, 2)).toBe(3)
})
})Vitest比Jest更快,配置更简单,推荐新项目使用。
3. Mocha + ts-node
如果你喜欢Mocha,也可以配合ts-node使用。
npm install mocha ts-node @types/mocha --save-dev运行:
mocha --require ts-node/register 'src/**/*.test.ts'五、调试工具
1. VS Code调试
VS Code内置了TypeScript调试支持。
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug TypeScript",
"program": "${workspaceFolder}/src/index.ts",
"preLaunchTask": "tsc: build",
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
]
}可以在TypeScript代码中打断点,直接调试。
2. ndb
ndb是Chrome DevTools的Node.js调试工具。
# 安装
npm install ndb --global
# 调试
ndb node script.js
ndb ts-node script.tsndb提供了Chrome DevTools的界面,调试体验更好。
六、文档工具
1. TypeDoc
TypeDoc可以从TypeScript代码生成文档。
# 安装
npm install typedoc --save-dev
# 生成文档
typedoc --out docs srcTypeDoc会解析代码中的注释和类型,生成漂亮的HTML文档。
写注释:
/**
* 计算两个数的和
* @param a 第一个数
* @param b 第二个数
* @returns 两个数的和
*/
export function sum(a: number, b: number): number {
return a + b
}2. api-extractor
api-extractor可以提取API的类型定义,生成API报告。
# 安装
npm install @microsoft/api-extractor --save-dev
# 初始化
api-extractor init
# 运行
api-extractor runapi-extractor可以帮你管理API的变更,确保API的兼容性。
七、类型工具
1. type-fest
type-fest是一个TypeScript类型工具库,提供了很多实用的类型。
npm install type-fest常用类型:
import {
PartialDeep,
RequiredDeep,
CamelCase,
SnakeCase,
JsonObject,
LiteralUnion
} from 'type-fest'
// 深度Partial
type Config = PartialDeep<{ a: { b: number } }>
// 驼峰转下划线
type Snake = SnakeCase<'fooBar'> // 'foo_bar'2. ts-toolbelt
ts-toolbelt是另一个类型工具库,功能更强大。
npm install ts-toolbeltimport { Object, String, List } from 'ts-toolbelt'
// 合并对象
type Merged = Object.Merge<{ a: number }, { b: string }>
// 字符串操作
type Upper = String.Upper<'hello'> // 'HELLO'3. zod
zod是一个运行时类型校验库,可以和TypeScript类型配合使用。
npm install zodimport { z } from 'zod'
// 定义schema
const UserSchema = z.object({
name: z.string(),
age: z.number().int().min(0),
email: z.string().email(),
})
// 推断类型
type User = z.infer<typeof UserSchema>
// 校验
const user = UserSchema.parse(data)zod既做运行时校验,又提供TypeScript类型,非常实用。
八、代码质量工具
1. Prettier
Prettier是代码格式化工具,支持TypeScript。
npm install prettier --save-dev.prettierrc:
{
"semi": false,
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"tabWidth": 2
}配合ESLint使用:
npm install eslint-config-prettier --save-dev2. Husky + lint-staged
Husky可以管理Git hooks,lint-staged可以只检查暂存的文件。
npm install husky lint-staged --save-dev
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"package.json:
{
"lint-staged": {
"*.ts": ["eslint --fix", "prettier --write"],
"*.{json,md}": ["prettier --write"]
}
}提交代码时自动检查和格式化,保证代码质量。
九、我的工具链推荐
根据项目大小,推荐不同的工具组合。
1. 小型项目
- 编译:tsc
- 运行:tsx
- 测试:Vitest
- 检查:ESLint + Prettier
- 简单高效
2. 中型项目
- 编译:swc + tsc(类型检查)
- 运行:tsx
- 测试:Vitest
- 检查:ESLint + Prettier + Husky
- 文档:TypeDoc
- 类型校验:zod
3. 大型项目
- 编译:esbuild/swc + tsc
- 打包:Vite或Rollup
- 测试:Vitest + 覆盖率
- 检查:ESLint + Prettier + Husky + type-coverage
- 文档:TypeDoc + api-extractor
- 类型工具:type-fest + zod
- 监控:Sentry
十、使用建议
1. 不要过度配置
工具是为了提升效率,不是为了增加负担。
- 不要一上来就配置所有工具
- 从小的配置开始,逐步增加
- 只配置你真正需要的
- 定期清理不用的工具
2. 保持更新
TypeScript生态发展很快,工具也在不断更新。
- 定期更新依赖
- 关注新工具和新特性
- 不要用过时的工具
- 比如tsx比ts-node更快,Vitest比Jest更快
3. 团队统一
团队项目,工具要统一。
- 共享配置文件
- 统一代码风格
- 统一检查规则
- 文档说明工具的使用方法
4. 类型是核心
工具只是辅助,核心是写好类型。
- 开启strict模式
- 尽量不用any
- 用satisfies等新特性
- 写好类型注释
- 定期检查类型覆盖率
十一、写在最后
TypeScript 4.9带来了很多新特性,配合合适的工具,可以大幅提升开发效率。
从类型检查到代码生成,从测试到调试,从文档到代码质量,每个环节都有好用的工具。选择适合自己项目的工具,搭建高效的开发流程。
2022年了,TypeScript已经成为前端开发的标配。用好TypeScript,用好工具,能让你的代码更健壮,开发更高效。
最后,用一句话总结:"工具是手段,效率是目的。选择合适的工具,写出更好的TypeScript代码。"
愿你用好工具,高效开发。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录