类型系统:
1.TypeScript是静态类型:
类型系统按照「类型检查时机」来分类,可以分为动态类型和静态类型。
动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。JS是一门解释型语言,没有编译阶段,所以JS是动态类型。
2.TypeScript 是弱类型:
类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型,TS是完全兼容JS的,它不会修改JS运行时的特性,所以它们都是弱类型。
例子:
console.log(1 + '1'); // 打印出字符串 '11', ts和js都不会报错
print(1 + '1')
Python 是强类型会报错
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
适用于任何规模
1.TypeScript 非常适用于大型项目——这是显而易见的,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。
2.在中小型项目中推行 TypeScript 的最大障碍就是认为使用 TypeScript 需要写额外的代码,降低开发效率。但事实上,由于有[类型推论],大部分类型都不需要手动声明了。相反,TypeScript 增强了编辑器(IDE)的功能,包括代码补全、接口提示、跳转到定义、代码重构等,这在很大程度上提高了开发效率。而且 TypeScript 有近百个[编译选项],如果你认为类型检查过于严格,那么可以通过修改编译选项来降低类型检查的标准。
3.TypeScript 还可以和 JavaScript 共存。这意味着如果你有一个使用 JavaScript 开发的旧项目,又想使用 TypeScript 的特性,那么你不需要急着把整个项目都迁移到 TypeScript,你可以使用 TypeScript 编写新文件,然后在后续更迭中逐步迁移旧文件。如果一些 JavaScript 文件的迁移成本太高,TypeScript 也提供了一个方案,可以让你在不修改 JavaScript 文件的前提下,编写一个[类型声明文件],实现旧项目的渐进式迁移。
4.就算你从来没学习过 TypeScript,你也可能已经在不知不觉中使用到了 TypeScript——在 VSCode 编辑器中编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript Language Service 实现的
5.一些第三方库原生支持了 TypeScript,在使用时就能获得代码补全了,比如 Vue 3.0 React
与标准同步
1.TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准同步发展。
ECMAScript 是 JavaScript 核心语法的标准,自 2015 年起,每年都会发布一个新版本,包含一些新的语法。
一个新的语法从提案到变成正式标准,需要经历以下几个阶段:
Stage 0:展示阶段,仅仅是提出了讨论、想法,尚未正式提案。
Stage 1:征求意见阶段,提供抽象的 API 描述,讨论可行性,关键算法等。
Stage 2:草案阶段,使用正式的规范语言精确描述其语法和语义。
Stage 3:候选人阶段,语法的设计工作已完成,需要浏览器、Node.js 等环境支持,搜集用户的反馈。
Stage 4:定案阶段,已准备好将其添加到正式的 ECMAScript 标准中。
一个语法进入到 Stage 3 阶段后,TypeScript 就会实现它。一方面,让我们可以尽早的使用到最新的语法,帮助它进入到下一个阶段;另一方面,处于 Stage 3 阶段的语法已经比较稳定了,基本不会有语法的变更,这使得我们能够放心的使用它
2.TypeScript 的发展历史
2012-10:微软发布了 TypeScript 第一个版本(0.8),此前已经在微软内部开发了两年。
2014-04:TypeScript 发布了 1.0 版本。
2014-10:Angular 发布了 2.0 版本,它是一个基于 TypeScript 开发的前端框架。
2015-01:ts-loader 发布,webpack 可以编译 TypeScript 文件了。
2015-04:微软发布了 Visual Studio Code,它内置了对 TypeScript 语言的支持,它自身也是用 TypeScript 开发的。
2016-05:@types/react 发布,TypeScript 可以开发 React 应用了。
2016-05:@types/node 发布,TypeScript 可以开发 Node.js 应用了。
2016-09:TypeScript 发布了 2.0 版本。
2018-06:TypeScript 发布了 3.0 版本。
2019-02:TypeScript 宣布由官方团队来维护 typescript-eslint,以支持在 TypeScript 文件中运行 ESLint 检查。
2020-05:Deno 发布了 1.0 版本,它是一个 JavaScript 和 TypeScript 运行时。
2020-08:TypeScript 发布了 4.0 版本。
2020-09:Vue 发布了 3.0 版本,官方支持 TypeScript。
不足
1.有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Class)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念;
2.短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本;
3.集成到构建流程需要一些工作量;ts-loader
4.可能和一些库结合的不是很完美;