TypeScript定义
TypeScript is JavaScript with syntax for types
TypeScript 是具有类型语法的 JavaScript
从官方的定义来看,TypeScript本质上还是JavaScript,可以认为它是一门新的语言,也可以认为它是提供类型能力的工具集合,最终目的就是为了让JavaScript拥有类型能力。虽然我们开发时写的是TypeScript相关语法,但最后运行之前都会被编译成JavaScript,所以不用担心运行环境是否支持TypeScript。
TypeScript构成
为了让JavaScript拥有类型能力,TypeScript引入了一套完整的类型系统,包括基础类型、类型操作等。除此之外还引入了一些TC39即将发布的新语法。为了能让开发者使用类型以及新语法的同时,保证浏览器正常识别并运行我们的代码,TypeScript引入了TypeScript Compiler(tsc),通过tsc配置即可实现类型擦除跟语法降级。林不渡同学将这个定义成TS的工程能力,我还是蛮认同的。
类型相关的关键特性:
-
静态类型:允许开发人员显式声明变量的类型。这有助于在开发过程中捕获类型相关的错误,并提供更好的工具支持,如自动完成和代码导航。
-
类型推断:可以根据变量的初始值自动推断其类型。这减少了对显式类型注解的需求,使代码更简洁和可读。
-
接口:TS支持接口,用于定义对象的结构。接口可以用于强制对象具有所需的属性和方法,确保其符合特定的结构。
-
类和对象:TS提供了基于类的面向对象编程特性,包括类、继承和访问修饰符(如 public、private 和 protected)。它使开发人员能够编写更结构化和可维护的代码。
-
泛型:TS支持泛型,可以创建与不同类型一起使用的可重用组件。泛型提供类型安全性,并可以提高代码的灵活性和可维护性。
-
模块和命名空间:TS内置了对模块和命名空间的支持,允许开发人员将代码组织为单独的文件和逻辑单元。这有助于代码组织、重用性和封装性。
-
装饰器:TS支持装饰器,用于在设计时添加元数据并修改类、方法和属性的行为。装饰器常用于框架(如 Angular)中,用于实现依赖注入和组件配置等功能。
-
工具和 IDE 支持:TS设计时考虑了与现代开发工具和 IDE 的良好兼容性。与纯JS相比,它提供了更好的自动完成、代码导航和重构支持。
除了类型相关的特性外,TS还引入了的新语法
TC39每年都会针对ECMAScript标准发布一些新特性,发布一个新特性需要经历如下5个阶段:
- 阶段 0: 初步提案(Strawperson)
- 阶段 1: 提案(Proposal)
- 阶段 2: 草案(Draft)
- 阶段 3: 候选(Candidate)
- 阶段 4: 完成(Finished)
TS 提前支持了一些已经到达阶段 3 / 4,或是比较重要的 TC39 提案,比如使用最多的可选链(?.)、空值合并(??)、装饰器等,这些语法都已经或即将成为 ECMAScript Next 的新成员。
TypeScript运行
Playground
TypeScript官方提供了一个在线的Playground,可以在不用搭建任何环境的情况下,直接运行TypeScript代码。特别是针对某项TS Config不清楚的时候,可以直接这里进行对比尝试。
ts-node
如果想要系统学习TypeScript,我们最好搭建一个能够快速运行TypeScript代码的环境,就像node index.js那样快速验证我们的代码逻辑。对应的工具就是这里介绍的ts-node,它们能直接运行ts文件,并支持监听文件重新运行。执行以下命令安装typescript以及ts-node:
# Locally in your project.
npm install -D typescript
npm install -D ts-node
# Or globally with TypeScript.
npm install -g typescript
npm install -g ts-node
然后,在项目中执行以下命令初始化TypeScript配置:
npx --package typescript tsc --init
// 如果全局安装了 TypeScript,可以这么做
tsc --init
接着,创建一个TS文件:
// index.ts
console.log("Hello World!")
最后执行以下命令:
ts-node index.ts
如果一切正常,终端会输出Hello World!。ts-node可以通过两种方式进行配置,直接在tsconfig.json中增加'ts-node'字段:
//tsconfig.json
{
// This is an alias to @tsconfig/node16: https://github.com/tsconfig/bases
"extends": "ts-node/node16/tsconfig.json",
// 此处放置有关ts-node的配置
"ts-node": {
// It is faster to skip typechecking.
// Remove if you want ts-node to do typechecking.
"transpileOnly": true,
"files": true,
"compilerOptions": {
// compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use
// different options with a single tsconfig.json.
}
},
"compilerOptions": {
// typescript options here
}
}
或在执行ts-node命令时,添加命令行参数。这里介绍几种常用的配置:
ts-node -T(--transpileOnly) index.ts:跳过执行过程中的类型检查,加快文件执行速度,且不会被类型报错卡住。这一选项的实质是使用了 TypeScript Compiler API 中的 transpileModule 方法,我们会在后面的章节详细讲解。ts-node --emit --compilerHost index.ts:不仅会执行当前文件,还会将编译后的Javascript代码输出到.ts-node文件夹下。
总结
- TypeScript 是具有类型语法的 JavaScript
- TypeScript构成:类型、语法、tsc(工程)
- TypeScript运行:PlayGround、ts-node