Typescript学习笔记(一)

65 阅读4分钟

什么是Typescript

Typescript是一种基于Javascript的编程语言,它增强了 JavaScript 的功能,更适合多人的大项目。TypeScript 可以看成是 JavaScript 的超集,在增强功能中最主要的就是增加了类型的概念。

类型的概念

我们都知道,程序运行过程中,错误出现的越早越好。而TypeScript 的类型检查会在编译时进行类型检查,然后会将类型声明和类型相关的代码全部删除,只留下能运行的 JavaScript 代码。 一般来说,TS会在变量声明时加上类型声明,类型声明的写法即在标识符后面添加“冒号 + 类型”;如果没有加类型声明,TypeScript 也会自己推断类型,称为类型推断。后续代码如果没有按照声明的类型赋值给变量,则会出现报错。

TS的三种特殊类型

any类型

any 类型表示没有任何限制,该类型的变量可以赋予任意类型的值。变量类型一旦设为any,TypeScript 实际上会关闭这个变量的类型检查,所以应该尽量避免使用any类型。 除此之外,如果我们把any类型的变量赋值给其他变量,则会造成类型污染即把其他变量也污染为any类型,造成不报错。

unknown类型

unknown类型可以看作是严格的any类型,主要是由于它的使用是存在限制的,虽然他和any一样也可以做任意变量的类型。

限制一

unknown类型的变量,不能直接赋值给其他类型的变量(除了any类型和unknown类型)。

限制二

不能直接调用unknown类型变量的方法和属性。

想要使用Unknown类型的变量,也需要进行类型缩小,所谓类型缩小,则是使用typeof进行类型判定,如果为true,则可以使用。

以上两种类型可以做任意变量的类型,因此TypeScript 将这两种类型称为“顶层类型”

never类型

never类型的定义是不存在任何属于“空类型”的值,就是说一个变量,不能赋给它任何值,(包括any和unknown)否则都会报错。

never类型的一个重要特点是,可以赋值给任意其他类型,注意是赋值,而不是声明。为什么可以赋值呢?因为TypeScript规定任何类型都包含了never类型,never也是TypeScript 唯一的“底层类型”。

基本类型

TS的基本类型有boolean、string、number、bigint、symbol、object、undefined和null(undefined 和 null 既可以作为值,也可以作为类型)。 需要注意的是:

  1. number类型和bigint类型不兼容
  2. 首字母大写的NumberStringBoolean不是类型名称
  3. 如果没有声明类型的变量,被赋值为undefinednull,它们的类型会被推断为any

包装对象类型

boolean、string、number、bigint、symbol与JS相同,都有包装对象类型,即变量可以直接调用方法,实际上是在调用方法时,变量会自动转为包装对象,对象调用了方法。

字面量类型

字面量是 JavaScript 本身提供的一个准确变量。TS支持将一个字面量当成一个类型使用。

由于包装对象的存在,导致这五种原始类型的值都有包装对象和字面量两种情况。为了区分,TS规定原始类型的大写同时包含包装对象和字面量两种情况,小写只包含字面量,不包含包装对象。

const s1:String = 'hello'; // 正确
const s2:String = new String('hello'); // 正确

const s3:string = 'hello'; // 正确
const s4:string = new String('hello'); // 报错

Object 类型和object类型

Object类型中,除了undefinednull这两个值不能转为对象,其他任何值都可以赋值给Object类型。而object类型则只包含对象、数组和函数。

联合类型和交叉类型

联合类型指的是多个类型组成的一个新类型,使用符号|表示。任何一个类型只要属于AB,就属于联合类型A|B

交叉类型(intersection types)指的多个类型组成的一个新类型,使用符号&表示。交叉类型同时满足类型A和类型B的特征。

本文参考链接TypeScript 语言简介 - TypeScript 教程 - 网道 (wangdoc.com)