TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程)。TypeScript 由微软开发的自由和开源的编程语言。TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上
学前知识点
强类型和弱类型
1. 先定义一些基础概念
- Program Errors – trapped errors导致程序终止执行,如除0,Java中数组越界访问 – untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址
- Forbidden Behaviours 语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.
- Well behaved、ill behaved – well behaved:如果程序执行不可能出现forbidden behaviors, 则为well behaved。 – ill behaved: 否则为ill behaved…
2. 有了上面的概念,再讨论强、弱类型,静态、动态类型强、弱类型
- 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
- 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于untrapped errors,即属于forbidden behaviors…故C是弱类型前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的
动态类型和静态类型
- 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
- 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed
总结
强弱类型没有明确的学术定义、动静态类型描述感觉也不明确。
从体验上描述强类型和弱类型的区别:
- 强类型:不允许隐式类型转换
- 弱类型:容忍隐式类型转换
动静态类型区别:
- 静态类型:编译时候检查类型
- 动态类型:运行时检查类型
JavaScript 与 TypeScript 的区别
TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。
TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。
为什么要用TypeScript
- TypeScript真的有必要吗?
- TypeScript 解决了什么痛点?
- TypeScript 的好处都有啥?和 JavaScript 的区别在哪?
我的观点:
- 主要 解决了javascript 类型缺陷,利用编译,提前进行类型检查,类型安全。避免犯错
- 增加一些语法糖和编程模式,类似枚举、元组、Mixin、泛型更编程编程习惯
TypeScript语言特性
TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:
- 类型批注和编译时类型检查
- 类型推断
- 类型擦除
- 接口
- 枚举
- Mixin
- 泛型编程
- 名字空间
- 元组
JavaScript 迁移到TypeScript
JavaScript迁移到TypeScript是渐进式的,可以根据配置选项编译。