介绍
Typed JavaScript at Any Scale.ts的两个作重要的特性,类型和适用于任何规模。
添加了类型系统的 JavaScript,适用于任何规模的项目。
TS的特性
类型系统
ts的核心是 类型
- 它没有类型约束,一个变量可能初始化的时候是字符串,但也可被赋值为数字
- 隐式类型转换的存在,使得变量类型很难在运行前就确定
- 基于原型的面向对象编程,使原型上的属性或方法可以在运行时被修改
- 函数是js一等公民,可以赋值给变量,也可以当做参数或返回值。
这些特性使得js一方面灵活方便,无所不能,另一方面也让js代码质量参差不齐,维护成本高,运行时错误多。
而ts的类型系统,将在很大程度上弥补js的缺点。
TS是静态类型
类型系统按照 类型检查时机
分为 动态类型
和 静态类型
动态类型是在运行时才会检查类型,如js,类型错误往往会导致运行时错误。
let foo = 1;
foo.split(' ');
// Uncaught TypeError: foo.split is not a function
// 运行时会报错(foo.split 不是一个函数),造成bug
静态类型是在编译阶段就能确定每个变量的类型,这种语言的类型错误往往会导致语法错误。 ts在运行前首先需要编译为js,而在这个编译过程中就会进行类型检查,所以ts是静态类型,下面这段代妈将在编译阶段报错。
let foo: number = 1;
foo.split(' ');
// Property 'split' does not exist on type 'number'.
// 编译时会报错(数字没有 split 方法),无法通过编译
这段ts和js看上去没什么区别,其实大部分的js代妈只需要少量修改就可以变成ts代码,这得益于 TypeScript 强大类型推论
,即使不去手动声明变量 foo 的类型,也能在变量初始化时自动推论出它是一个 number 类型。
TS是弱类型
类型系统按照 是否允许隐式类型转换
区分 强类型
和 弱类型
以下代码无论是ts还是js都可以运行
console.log(1 + '1');
// 打印出字符串 '11'
ts完全兼容js,不会改变js运行时特性,所以ts也是弱类型。
而像Python,则是强类型。
print(1 + '1')
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
// 修复它则需要
print(str(1) + '1')
# 打印出字符串 '11'
适用于任何规模
TypeScript 非常适用于大型项目——这是显而易见的,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。在中小型项目中推行 TypeScript 的最大障碍就是认为使用 TypeScript 需要写额外的代码,降低开发效率。但事实上,由于有[类型推论],大部分类型都不需要手动声明了。相反,TypeScript 增强了编辑器(IDE)的功能,包括代码补全、接口提示、跳转到定义、代码重构等,这在很大程度上提高了开发效率。而且 TypeScript 有近百个[编译选项],如果你认为类型检查过于严格,那么可以通过修改编译选项来降低类型检查的标准。 TypeScript 还可以和 JavaScript 共存。这意味着如果你有一个使用 JavaScript 开发的旧项目,又想使用 TypeScript 的特性,那么你不需要急着把整个项目都迁移到 TypeScript,你可以使用 TypeScript 编写新文件,然后在后续更迭中逐步迁移旧文件。如果一些 JavaScript 文件的迁移成本太高,TypeScript 也提供了一个方案,可以让你在不修改 JavaScript 文件的前提下,编写一个[类型声明文件],实现旧项目的渐进式迁移。
与标准同步发展
TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准[10]同步发展。一个语法进入到 Stage 3 阶段后,TypeScript 就会实现它。一方面,让我们可以尽早的使用到最新的语法,帮助它进入到下一个阶段;另一方面,处于 Stage 3 阶段的语法已经比较稳定了,基本不会有语法的变更,这使得我们能够放心的使用它。
总结
what is TypeScript ?
- TypeScript 是添加了类型系统的 JavaScript,适用于任何规模的项目。
- TypeScript 是一门静态类型、弱类型的语言。
- TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性。
- TypeScript 可以编译为 JavaScript,然后运行在浏览器、Node.js 等任何能运行 JavaScript 的环境中。
- TypeScript 拥有很多编译选项,类型检查的严格程度由你决定。
- TypeScript 可以和 JavaScript 共存,这意味着 JavaScript 项目能够渐进式的迁移到 TypeScript。
- TypeScript 增强了编辑器(IDE)的功能,提供了代码补全、接口提示、跳转到定义、代码重构等能力。
- TypeScript 拥有活跃的社区,大多数常用的第三方库都提供了类型声明。
- TypeScript 与标准同步发展,符合最新的 ECMAScript 标准(stage 3)。