TypeScript基础知识
图
TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成,TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器和任何操作系统

TypeScript介绍

是以JavaScript为基础构建的语言,是JavaScript的超集。其扩展了JavaScript并添加类型,可以在任何支持JavaScript的平台执行

环境安装

  • node(直接下载安装)
  • TypeScript编译器(使用npm安装)
// 全局安装
npm i -g typescript
// 查看版本
npm view typescript version
// 卸载
npm uninstall typescript

编译

tsc xxx.ts

类型

指定类型后不能再更改为其他类型

// 指定类型
let num:number;
// 指定类型并赋值
let num:number = 1;
// 自动指定类型(根据第一次赋值类型判断)
let str = 'test';

// 指定入参类型,指定返回类型
function add(a: number, b: number): number {
  return a + b;
}

let result = add(1, 3)

类型增加了代码的规范和可控性

图

number

指定为数字类型,如:

let age: number = 18;

string

指定为字符串类型,如:

let userName: string = 'Tom'

boolean

指定为布尔类型:如:

let flag: boolean = true;

字面量

将变量直接指定为某个值,意味着这个变量只能为这个值,类似常量的意思,但是可扩展,如:

// 定义数量为10,之后不可更改,同常量
let amount: 10;
// 可用于定义某些指定选项,只能赋值指定选项
let sex: 'man' | 'woman' | 'unknown';

any

任意类型,相当于关闭了该变量的类型检查,不建议使用,回到了js

let other: any;

let amount: number = 20;
// 此处不会报错
amount = other

注意:any的类型变量可以赋值给其他类型变量,即会影响其他变量的类型

unknown

未知类型,效果同any,都可以赋值,但是区别是不能赋值给其他类型变量,无法改变其他类型变量

是一个类型安全的any,不能直接赋值非其他类型变量

let other: unknown;

let amount: number = 20;
// 此处会报错
amount = other

// 类型报错处理办法

// 方法一:类型检查
if (typeof other === 'number') {
  amount = other
}
// 方法二:类型断言,告诉解析器该变量的类型,不用报错
amount = other as number
// 与上等同
amount = <number>other

补充类型断言语法:

变量 as 类型
<类型> 变量

void

表示空,例如函数的返回:

// 指定函数没有返回值,可为null
function fn(): void {

}

never

表示没有值类型,连null都不行,如程序报错,就没有返回

function fn(): never {
  throw new Error('报错')
}

联合类型

// 可以使用 | 实现联合类型
let other: number | string;

undefinednull是以上类型的子集,如果没有开启语法严格模式可以赋值

object

// {} 用来指定对象可以包含哪些属性,为对象
let people: {name: string}
// 在属性后加 ? 表示该属性可选
let people: {name?: string}
// 对于其他参数可传又不固定的情况,可不限制其他传入
let people: {name: string, [propName: string]: any}

// 同理可对函数结构进行定义,指定参数类型和返回值类型
let fun: (a: number, b: number) => number
fun = function(a, b) {
  return a + b;
}

数组

方式1
let arr:number[] = [10,20,30]
方式2(泛型)
let arr:Array<number> = [10,20,30]

元组

允许不同的数据类型

let arr:[string,number,boolean] = ['文字',10,false]

枚举

enum Gender {
  man   = 0,
  woman = 1
}

类型断言(只作用在编译阶段)

方式1
if ((<string>str).length) {}
方式2
if ((str as string).length) {}

class Person {
  // 属性
  name:string

  // 构造函数
  constructor(name:string) {
    this.name = name
  }

  // 方法
  say(str:string) {
    xxx
  }
}

// 对象的创建
const person = new Persion();

静态属性

可直接访问

class Person {
  // 属性
  static name:string;
}

继承

class Animal {

}

class Dog extends Animal {

}

接口

interface IPerson {
  readonly id:number,  // 只读属性
  name:string,
  sex?:string          // 可选
}