这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战。
TypeScript是微软开发的基于javascript的一个超集,提供了基于静态类型检查、模块化等等一系列的概念
1.TypeScript和JavaScript的区别
2.TypeScript基础类型
TypeScript包含JS的所有类型: 基础类型:Number、String、Boolean、Null、undefined、symbol 引用类型:Array、Object、Function 除了这些,还有一些TS特有的类型:
- Enum(枚举)
- Any(任何类型):任何值都可以赋值给any
- Unknown(未知类型):任何值也可以赋值给unknown,但unknown只能赋值给any和unknown
- Tuple(元组):数组用来存相同类型的值,元组可以存储不同类型的值。
let tup:[string, number] = ['aa', 1]
- void: 代表没有类型,比如一个函数没有返回,就定义void
- object:是TS2.2引入的新类型,用来表示非原始类型
- Never:用不存在值的类型,比如错误被throw出去
3.TypeScript特殊类型
在现实工作中,一个对象很可能不止一种类型,这个时候我们应该如何去定义呢?我们不可能给所有类型都设为any,这样就失去了TS给我们设置类型检查的意义,TypeScript也就变成AnyScript了。
a.联合类型
我们可以通过|来创建一种联合类型,代表这个变量可以有多种指定类型
cosnt Type: string | undefined
关于联合类型还有很多方式,比如创建类型别名
type newT = string | undefined
cosnt Type: newT
b.交叉类型
交叉类型就是通过&把多个类型合并为一个类型。
type newT = {x: number} & {y: number}
c.泛型
泛型需要着重来讲,这也是TS必须要掌握的一个核心概念(面试一般都会问道)。泛型的意义在于当我有一些类型暂时无法确定,要根据实际情况来确定,所以有两种方式。
- 泛型类 Count一开始是一个泛型,内部_value也是泛型T,但是当我new的时候指定了number,代表C及内部_value的类型都需要为number
class Count<T>{
private _value: T;
constructor(val: T) {
this._value = val;
}
}
let C = new Count<number>(12)
- 泛型函数 不管是泛型类还是泛型函数,所起的作用都是一样的。
function Count<T>(arg: T): T {
return arg;
}
Count<number>(12);