TypeScript
简介
认识
TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:
- 类型批注和编译时类型检查
- 类型推断
- 类型擦除
- 接口
- 枚举
- Mixin
- 泛型编程
- 名字空间
- 元组
- Await
TypeScript 作为 JavaScript 的超集,他在拥有 JavaScript 所有能力的基础上,做到了静态类型,这解决了 JavaScript 编写不规范会导致的很多问题,虽然它依旧是弱类型语言,但它在变量进行类型隐式转换时也做了限制,让它在编写的过程中可以更加规范。而不规范的地方,会直接报错来提醒开发者。
TypeScript 的类型推导是基于上下文类型推导(Contextual Typing)的。所以即便你不添加任何类型,编译器也会根据编写的代码,推导出变量或函数的类型,当无法推导出的时候,TypeScript 则将其设置为any
const hello : string = "Hello World!"
console.log(hello)
TS 与 JS 的区别
TypeScript | JavaScript |
---|---|
JavaScript 的超集用于解决大型项目的代码复杂性 | 一种脚本语言,用于创建动态网页。 |
可以在编译期间发现并纠正错误 | 作为一种解释型语言,只能在运行时发现错误 |
强类型,支持静态和动态类型 | 弱类型,没有静态类型选项 |
最终被编译成 JavaScript 代码,使浏览器可以理解 | 可以直接在浏览器中使用 |
支持模块、泛型和接口 | 不支持模块,泛型或接口 |
支持 ES3,ES4,ES5 和 ES6 等 | 不支持编译其他 ES3,ES4,ES5 或 ES6 功能 |
社区的支持仍在增长,而且还不是很大 | 大量的社区支持以及大量文档和解决问题的支持 |
安装
针对使用 npm 的用户:
npm install -g typescript
# or
npm i -g typescript
使用命令来执行 ts 代码:
tsc file1.ts
node file.js
简化执行步骤
安装 ts-node
npm i -g ts-node
执行
ts-node f
基础类型
我们使用 let
关键字来代替大家所熟悉的 JavaScript 关键字 var
。 let
关键字是 JavaScript 的一个新概念,TypeScript 实现了它。很多常见的问题都可以通过使用 let
来解决,所以尽可能地使用 let
来代替 var
吧。
布尔值 boolean
let isDone: boolean = false;
数字 number
和 JavaScript 一样,TypeScript 里的所有数字都是浮点数
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
字符串 string
let name: string = "bob";
name = "smith";
数组 list
两种方式可以定义数组。 第一种,可以在元素类型后面接上 []
,表示由此类型元素组成的一个数组:
let list: number[] = [1, 2, 3];
第二种方式是使用数组泛型,Array<元素类型>
:
let list: Array<number> = [1, 2, 3];
元组 tuple
元组类型允许表示一个已知元素数量和类型的数组(各元素的类型不必相同)
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error
当访问一个已知索引的元素,会得到正确的类型:
console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
当访问一个越界的元素,会使用联合类型替代:
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型
枚举 enum
enum
类型是对 JavaScript 标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
指定编号
默认情况下,从 0
开始为元素编号。 你也可以手动的指定成员的数值。 例如,我们将上面的例子改成从 1
开始编号:
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
// 或者,全部都采用手动赋值:
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;