重学TS(一)

707 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

TypeScript是微软开发的基于javascript的一个超集,提供了基于静态类型检查、模块化等等一系列的概念

1.TypeScript和JavaScript的区别

微信图片_20210811185254.png 微信图片_20210811185423.png

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);