typeScript 入门

194 阅读4分钟

typeScript

安装方式

npm install -g typescript

检测版本号

cmd/ tsc -v

优缺点

优点

  1. 增加了代码的可读性和可维护性
    • 类型系统实际上是最好的文档,大部分函数看看类型定义就知道如何使用了
    • 可以在编译阶段就发现大部分错误,这总比在运行的时候出错好
    • 增强了编译器和IDE,包括代码补全,接口提示,跳转定义,代码重构
  2. 非常包容
    • 文件后缀为.ts
    • 及时不显示的定义类型,也能够自动做出类型推论
    • 编译报错的时候也会生成js文件
    • 兼容第三方库,及时第三方空不是用ts写的,也可以编写单独的类型文件提供ts读取
  3. 活跃的社区
    • 大把的三方库都有提供给ts的类型定义文件
    • angular、vue、vscode、Ant Design等耳熟能祥的项目就是用的ts
    • 可以使用ES6

缺点

  1. 有一定的学习成本,需要理解新的内容

    • 接口(Interfaces
    • 泛型(Generics
    • 类(Classes
    • 枚举类型(Enums)等前端工程师可能不是很熟悉的概念
  2. 短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本

  3. 成到构建流程需要一些工作量

基础

原始数据类型

JavaScript 的类型分为两种:原始数据类型和对象类型(Object types)。

原始数据类型包括:布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 SymbolBigInt

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 中,booleanJavaScript 中的基本类型,而 BooleanJavaScript 中的构造函数。其他基本类型(除了 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;

其中 0b10100o744ES6 中的二进制和八进制表示法,它们会被编译为十进制数字。

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 类型的变量没有什么用,因为你只能将它赋值为 undefinednull

	let unusable: void = undefined;

编译结果:

	var unusable = undefined;

NullUndefined

TypeScript 中,可以使用 nullundefined 来定义这两个原始数据类型:

	let u: undefined = undefined;
	let n: null = null

void 的区别是,undefinednull 是所有类型的子类型。也就是说 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;

精神小伙气质在 到哪都是实力派!