相关文章推荐
Skip to content
当前页大纲

基础类型

boolean 布尔值

number 数字

string 字符串

Array 数组

普通写法

泛型写法

tuple 元组

元组其实就是一个数据的造型,给元组赋值满足定义时的形状。

定义一个元组,第一个只能是 string 类型,第二个只能是 number 类型,并且这个数组只能有两个元素,不能同意元组以外的元素。

any 任意值

  1. 当你想要调用一个属性里面的方法或者属性,但是里面的方法和属性没有你不知道其类型,你就可以给他赋值为 any,就可以任意调用里面的方法和属性。
  2. 可能认为 Object 有相似的作用,就像它在其它语言中那样。 但是 Object 类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法。
  3. 被定义为 any 类型的值,相当于关闭了 ts 对他的类型检查
  4. 造成类型污染,如果将一个 any 类型的值赋值给另一个值,那么这个值的类型也会变成 any

void 空值

当一个值被指定为 void 时,这个值只能被赋值为 null 和 undefined,因为他不能是任何值

null undefined

never 永远不存在的值

unknown 未知类型,类型安全的 any

它表示一个类型未知的值。和 any 类型类似,unknown 也可以被赋值为任何类型的值,但是在使用 unknown 类型值时,需要先进行类型检查或类型断言,以确保类型安全。当一个值未知类型时最好用 unknown,不要用 any。

  1. unknown 可以被赋值为任何类型的值

  2. 虽然最后被赋值为了一个字符串,但是本质类型上是一个 unknown,所以不能赋值给其他类型,要赋值也行,先判断类型,就可以给其他类型的值赋值,或者使用类型断言 as,我们知道 a 是一个 string,但是编辑器不知道,此时就可以使用类型断言(as)告诉编辑器 a 就是一个 string

  3. 能够使用的运算符也是有限的,只能进行比较运算(运算符 == === != !== || && ? )、取反运算(运算符 ! )、 typeof 运算符和 instanceof 运算符这几种,其他运算都会报错

enum 枚举

  • 枚举的时候不直接赋值,那么枚举的属性的值就是从 0 开始的数值

  • 枚举的时候直接赋值,那么每个枚举的属性都要赋值

object

object 表示非原始类型,也就是除 number,string,boolean,symbol,null 或 undefined 之外的类型。

  • 常用方式(元组)

  • 不常用方式

  • 任意值

联合类型

将几种类型使用 | 联合起来表示一个值的类型,该值可以是联合类型中的任意一种类型。但是如果对这个值某种类型独有属性的操作就必须先确定他的类型,可以使用 typeof 或者 类型断言 ,如果是该值所有类型共同的方法,那么则可以不用确定类型。

  • 单独访问某种属性的特性,必须先确定类型

  • 访问联合类型共有的属性,可以直接访问

高级类型

类型别名

使用关键字 type 来指定类型别名,可以使用类型别名来为任何类型命名。

  • 为一个自定义类型指定一个联合类型

  • 指定一个对象的类型别名,类似于 interface

  • 如果类型别名指定的不是类型,而是值,那么则相当于是枚举值

interface

是一种声明对象类型的方式, interface 的所有功能都在 type 中可用,他们之间可以任意选择,主要区别在于无法重新打开类型以添加新属性,而接口始终可扩展。

类型断言

有时候你比 ts 更加了解该数据的类型,此时就可以 as 关键字进行类型断言。

注意:

  1. 联合类型可以被断言为其中一个类型
  2. 父类可以被断言为子类
  3. 任何类型都可以被断言为 any
  4. any 可以被断言为任何类型
  5. 要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容 A 即可
  • 断言为一致类型来使用这个类型的属性

  • 双重断言

字面类型

  • 使用 var、let 定义变量并赋值为简单的数据类型,那么 ts 会自动推断他的类型

  • 使用 const 定义变量并赋值为简单的数据类型,那么这个变量的类型就是字面类型

  • 通过字面量组合成为联合字面量,类似于枚举值

  • 字面量也可以和非字面类型结合使用

  1. 字面推断

    • 解决方式一,将 req 变为字面量类型

    • 解决方式二,将 req.method 断言为 'post'

非空断言运算符(后缀 !

如果一个值可能是 null 或者 undefined,此时在同他身上读取属性是不行的,此时就可以使用非空断言,或者是 js 中的链判断运算符也行。非空断言是我们告诉程序这个值一定不会是空的,而链判断运算符是如果这个值为空就不往后面执行。

非空断言其实也是类型断言,只不过是断言为该值不是 null undefined

 
推荐文章