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;
undefined
和null
是以上类型的子集,如果没有开启语法严格模式可以赋值
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 // 可选
}