3、与标准同步发展
TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准同步发展。
ECMAScript 是 JavaScript 核心语法的标准,自 2015 年起,每年都会发布一个新版本,包含一些新的语法。
一个新的语法从提案到变成正式标准,需要经历以下几个阶段:
Stage 0:展示阶段,仅仅是提出了讨论、想法,尚未正式提案。
Stage 1:征求意见阶段,提供抽象的 API 描述,讨论可行性,关键算法等。
Stage 2:草案阶段,使用正式的规范语言精确描述其语法和语义。
Stage 3:候选人阶段,语法的设计工作已完成,需要浏览器、Node.js 等环境支持,搜集用户的反馈。
Stage 4:定案阶段,已准备好将其添加到正式的 ECMAScript 标准中。
一个语法进入到 Stage 3 阶段后,TypeScript 就会实现它。一方面,让我们可以尽早的使用到最新的语法,帮助它进入到下一个阶段;另一方面,处于 Stage 3 阶段的语法已经比较稳定了,基本不会有语法的变更,这使得我们能够放心的使用它。
除了实现 ECMAScript 标准之外,TypeScript 团队也推进了诸多语法提案,比如可选链操作符(?.)、空值合并操作符(??)、Throw 表达式、正则匹配索引等。
3、TypeScript和JavaScript的区别
4、怎么安装TypeScript和编辑器推荐
1、安装 TypeScript
TypeScript 的命令行工具安装方法如下:
1. npm install -g typescript 2. # 或者用yarn
以上命令会在全局环境下安装 tsc
命令,安装完成之后,我们就可以在任何地方执行 tsc
命令了。
编译一个 TypeScript 文件很简单:
1. tsc hello.ts 2. # hello.ts => hello.js
我们约定使用 TypeScript 编写的文件以 .ts 为后缀,用 TypeScript 编写 React 时,以 .tsx 为后缀。
当然,对于刚入门 TypeScript 的小伙伴,也可以不用安装 typescript,而是直接使用线上的 TypeScript Playground 来学习新的语法或新特性。
TypeScript Playground:www.typescriptlang.org/play/
2、编辑器推荐
TypeScript 最大的优势之一便是增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等。
主流的编辑器都支持 TypeScript,这里我推荐使用 Visual Studio Code(前端开发神器)。
它是一款开源,跨终端的轻量级编辑器,内置了对 TypeScript 的支持。无需要编译阶段,写完就能看到对不对。
上图写完就报了错误,因为number没有length属性。
另外vscode本身也是用 TypeScript 编写的。
下载安装:Visual Studio Code - Code Editing. Redefined
5、第一个案例Hello TS
我们从一个简单的例子开始。
将以下代码复制到 hello.ts
中:
function sayHello(person: string) { return 'Hello, ' + person; } let user = 'TS'; console.log(sayHello(user));
然后执行
tsc hello.ts
这时候会生成一个编译好的文件 hello.js
:
function sayHello(person) { return 'Hello, ' + person; } var user = 'TS'; console.log(sayHello(user));
在 TypeScript 中,我们使用 : 指定变量的类型,: 的前后有没有空格都可以。
上述例子中,我们用 : 指定 person 参数类型为 string。但是编译为 js 之后,并没有什么检查的代码被插入进来。
这是因为 TypeScript 只会在编译时对类型进行静态检查,如果发现有错误,编译(ts文件转换成js的过程)的时候就会报错。而在运行时,与普通的 JavaScript 文件一样,不会对类型进行检查。
如果我们需要保证运行时的参数类型,还是得手动对类型进行判断:(这也是最优的写法,动静结合)
function sayHello(person: string) { if (typeof person === 'string') { return 'Hello, ' + person; } else { throw new Error('person is not a string'); } } let user = 'TS'; console.log(sayHello(user));
下面尝试把这段代码编译一下:
function sayHello(person: string) { return 'Hello, ' + person; } let user = [0, 1, 2]; console.log(sayHello(user));
编辑器中会提示错误,编译的时候也会出错:
但是还是生成了 js 文件:
1. function sayHello(person) { 2. return 'Hello, ' + person; 3. } 4. var user = [0, 1, 2]; 5. console.log(sayHello(user));
这是因为 TypeScript 编译的时候即使报错了,还是会生成编译结果,我们仍然可以使用这个编译之后的文件。
如果要在报错的时候终止 js 文件的生成,可以在 tsconfig.json 中配置 noEmitOnError 即可。关于 tsconfig.json,请参阅官方手册(中文版)。 后面会说明tsconfig.json怎么来的!