源起
Tim Berners-Lee 于1989年发明了万维网并于1991年对外发布了世界上第一个网页浏览器 WorldWideWeb,从此拉开了 Web 时代的序幕。
1994 年网景公司(Netscape)发布了 Navigator 浏览器 0.9 版本,这是历史上第一个比较成熟的网络浏览器,轰动一时。
1995 年,受雇于 Netscape 的 Brendan Eich 用了十天时间设计出了 JavaScript。之后便开启了浏览器兼容和争夺的至暗时刻,到 1997 年 ECMA 组织开始发布公开标准,JavaScript 即将进入标准化进程。得益于 ECMA 的标准,JavaScript 愈发的强大,并借助 Babel 实现了标准制定和浏览器实现的兼容,使得我们可以写最现代化的代码而不用过多的考虑浏览器兼容性,并且还诞生 Node.js、React Native 等服务器端、移动端的 JavaScript 运作方式,谁也想不到二十年后的今天 JavaScript 似乎印证了 Write Once Run Anywhere 的优势,Brendan Eich 作为 JavaScript 之父,在编程的历史上留下了他的印记。
随着时间的推移,微软发现外部客户在开发大规模 JavaScript 应用的过程中遭遇了语言本身的短板,在 2012 年 10 月,微软发布了首个公开版本的TypeScript,2013年6月19日,在经历了一个预览版之后微软正式发布了正式版TypeScript,当前最新版本为TypeScript 3.9。
TypeScript 是 JavaScript 的严格超集,因此任何 JavaScript 都是合法的 TypeScript(非常像 C 和 Objective-C 的关系)。TypeScript 为 JavaScript 带来了强大的类型系统和对 ES2015的支持,它的编译工具可以运行在任何服务器和任务系统上。类型系统实际上是非常好的文档,增强了编辑器在 智能提示,跳转定义,代码补全 等方向上的功能,并且在编译阶段能发现大部分的错误,对于大型工程的代码可读性和可维护性起到了了不起的作用。
typescript的优势
- 提供了类型系统,使得代码比如函数一眼就可以看出如何使用,便于代码的维护和语义化。有了类型系统使得很多问题在编译的时候就报错了,这样比在运行时就出错更加方便,更早的暴露已知也能提高开发效率
- typescript是JavaScript的超级,js文件可以直接名称成ts。typescript即使不显式的定义类型也能进行类型推论。typescript代码即使编译报错也会生成JavaScript代码
- 兼容第三方库,即使第三方库不是使用ts写的,也可以编写单独的类型文件供 TypeScript 读取,当然大部分第三方库也是提供了ts的版本
- ts支持了es6和部分未来即将进入es7、es8的部分规范
JavaScript 与 TypeScript 的区别
TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。
javascript数据类型
在JavaScript中数据类型分为原始数据类型和引用数据类型
基本数据类型:String Boolean Number null undefined symbol
引用数据类型:Object Function Date Error RegExp
typescript中数据类型
变量一旦定义为某种类型就不能被修改,因此ts是强类型语言,而JavaScript中变量的类型是可以随意变化的,归类为弱类型语言
- boolean 原始数据类型-布尔值
let isHandsome: boolean = false
- number 原始数据类型-数字,二进制和八进制在编译时会被编译成十进制
// 十进制
let count: number = 100
// 二进制
let computer: number = 0b10101
// 八进制
let age: number = 0o677
// 十六进制
let salary: number = 0x00A
- string -字符串,typescript中也支持模板字符串
let str: string = 'you are ok'
let sentance: string = `I know ${str}`
- any 任意值,表示变量可以赋值为任意类型,当然可以是对象类型,也可以调用方法
let hobby: any = '吃饭了'
hobby = 100
hobby = false
hobby = undefined
未声明类型的变量,在ts中一个变量如果没有声明类型就会默认为any类型