typeScript
安装方式
npm install -g typescript
检测版本号
cmd/ tsc -v
优缺点
优点
- 增加了代码的可读性和可维护性
- 类型系统实际上是最好的文档,大部分函数看看类型定义就知道如何使用了
- 可以在编译阶段就发现大部分错误,这总比在运行的时候出错好
- 增强了编译器和IDE,包括代码补全,接口提示,跳转定义,代码重构
- 非常包容
- 文件后缀为
.ts - 及时不显示的定义类型,也能够自动做出类型推论
- 编译报错的时候也会生成
js文件 - 兼容第三方库,及时第三方空不是用
ts写的,也可以编写单独的类型文件提供ts读取
- 文件后缀为
- 活跃的社区
- 大把的三方库都有提供给
ts的类型定义文件 angular、vue、vscode、Ant Design等耳熟能祥的项目就是用的ts- 可以使用
ES6
- 大把的三方库都有提供给
缺点
-
有一定的学习成本,需要理解新的内容
- 接口(
Interfaces) - 泛型(
Generics) - 类(
Classes) - 枚举类型(
Enums)等前端工程师可能不是很熟悉的概念
- 接口(
-
短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,
TypeScript能够减少其维护成本 -
成到构建流程需要一些工作量
基础
原始数据类型
JavaScript 的类型分为两种:原始数据类型和对象类型(Object types)。
原始数据类型包括:布尔值、数值、字符串、null、undefined 以及 ES6 中的新类型 Symbol 和 BigInt。
boolean/Boolean
布尔值是最基础的数据类型,在TypeScript中,使用boolean定义布尔值类型
let isTool: boolean = false;
// 编译通过// 后面约定,未强调编译错误的代码片段,默认为编译通过
注意,使用构造函数Boolean创造的对象不是布尔值
let isTool2: boolean = new Boolean(1);
Type 'Boolean' is not assignable to type 'boolean'.
'boolean' is a primitive, but 'Boolean' is a wrapper object. Prefer using 'boolean' when possible.
事实上new Boolean()返回的是一个boolean对象:
let tool3: Boolean = new Boolean(1);
直接调用Boolean也可以返回一个boolean类型:
let tool4: boolean = Boolean(1);
在 TypeScript 中,boolean 是 JavaScript 中的基本类型,而 Boolean 是 JavaScript 中的构造函数。其他基本类型(除了 null 和 undefined)一样,不再赘述。
Number
使用 number 定义数值类型:
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
编译结果:
var decLiteral = 6;
var hexLiteral = 0xf00d;
// ES6 中的二进制表示法
var binaryLiteral = 10;
// ES6 中的八进制表示法
var octalLiteral = 484;
var notANumber = NaN;
var infinityNumber = Infinity;
其中 0b1010 和 0o744 是 ES6 中的二进制和八进制表示法,它们会被编译为十进制数字。
string
使用 string 定义字符串类型:
let myName: string = 'Tom';
let myAge: number = 25;
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
编译结果:
var myName = 'Tom';
var myAge = 25;
// 模板字符串
var sentence = "Hello, my name is " + myName + ".\nI'll be " + (myAge + 1) + " years old next month.";
空值
javascript没有空值Void的概念,在TypeScript中,可以用void表示没有任何返回值的函数:
function alertName(): void {
alert('My name is Tom');
}
声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:
let unusable: void = undefined;
编译结果:
var unusable = undefined;
Null 和 Undefined
在 TypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型:
let u: undefined = undefined;
let n: null = null
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:
// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
编译结果:
var num = undefined;
// 这样也不会报错
var u;
var num2 = u;
而 void 类型的变量不能赋值给 number 类型的变量:
let u: void;
let num: number = u;
这样会直接报错,编译结果为
var u;
var num = u;