基础类型
boolean 布尔值
number 数字
string 字符串
Array 数组
普通写法
泛型写法
tuple 元组
元组其实就是一个数据的造型,给元组赋值满足定义时的形状。
定义一个元组,第一个只能是 string 类型,第二个只能是 number 类型,并且这个数组只能有两个元素,不能同意元组以外的元素。
any 任意值
- 当你想要调用一个属性里面的方法或者属性,但是里面的方法和属性没有你不知道其类型,你就可以给他赋值为 any,就可以任意调用里面的方法和属性。
- 可能认为 Object 有相似的作用,就像它在其它语言中那样。 但是 Object 类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法。
- 被定义为 any 类型的值,相当于关闭了 ts 对他的类型检查
-
造成类型污染,如果将一个
any
类型的值赋值给另一个值,那么这个值的类型也会变成any
。
void 空值
当一个值被指定为 void 时,这个值只能被赋值为 null 和 undefined,因为他不能是任何值
null 和 undefined
never 永远不存在的值
unknown 未知类型,类型安全的 any
它表示一个类型未知的值。和 any 类型类似,unknown 也可以被赋值为任何类型的值,但是在使用 unknown 类型值时,需要先进行类型检查或类型断言,以确保类型安全。当一个值未知类型时最好用 unknown,不要用 any。
-
unknown 可以被赋值为任何类型的值
-
虽然最后被赋值为了一个字符串,但是本质类型上是一个 unknown,所以不能赋值给其他类型,要赋值也行,先判断类型,就可以给其他类型的值赋值,或者使用类型断言 as,我们知道 a 是一个 string,但是编辑器不知道,此时就可以使用类型断言(as)告诉编辑器 a 就是一个 string
-
能够使用的运算符也是有限的,只能进行比较运算(运算符
==
、===
、!=
、!==
、||
、&&
、?
)、取反运算(运算符!
)、typeof
运算符和instanceof
运算符这几种,其他运算都会报错
enum 枚举
-
枚举的时候不直接赋值,那么枚举的属性的值就是从 0 开始的数值
-
枚举的时候直接赋值,那么每个枚举的属性都要赋值
object
object 表示非原始类型,也就是除 number,string,boolean,symbol,null 或 undefined 之外的类型。
-
常用方式(元组)
-
不常用方式
-
任意值
联合类型
将几种类型使用
|
联合起来表示一个值的类型,该值可以是联合类型中的任意一种类型。但是如果对这个值某种类型独有属性的操作就必须先确定他的类型,可以使用
typeof
或者
类型断言
,如果是该值所有类型共同的方法,那么则可以不用确定类型。
-
单独访问某种属性的特性,必须先确定类型
-
访问联合类型共有的属性,可以直接访问
高级类型
类型别名
使用关键字
type
来指定类型别名,可以使用类型别名来为任何类型命名。
-
为一个自定义类型指定一个联合类型
-
指定一个对象的类型别名,类似于
interface
-
如果类型别名指定的不是类型,而是值,那么则相当于是枚举值
interface
是一种声明对象类型的方式,
interface
的所有功能都在
type
中可用,他们之间可以任意选择,主要区别在于无法重新打开类型以添加新属性,而接口始终可扩展。
类型断言
有时候你比 ts 更加了解该数据的类型,此时就可以
as
关键字进行类型断言。
注意:
- 联合类型可以被断言为其中一个类型
- 父类可以被断言为子类
- 任何类型都可以被断言为 any
- any 可以被断言为任何类型
- 要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容 A 即可
-
断言为一致类型来使用这个类型的属性
-
双重断言
字面类型
-
使用 var、let 定义变量并赋值为简单的数据类型,那么 ts 会自动推断他的类型
-
使用 const 定义变量并赋值为简单的数据类型,那么这个变量的类型就是字面类型
-
通过字面量组合成为联合字面量,类似于枚举值
-
字面量也可以和非字面类型结合使用
-
字面推断
-
解决方式一,将 req 变为字面量类型
-
解决方式二,将 req.method 断言为 'post'
-
非空断言运算符(后缀
!
)
如果一个值可能是 null 或者 undefined,此时在同他身上读取属性是不行的,此时就可以使用非空断言,或者是 js 中的链判断运算符也行。非空断言是我们告诉程序这个值一定不会是空的,而链判断运算符是如果这个值为空就不往后面执行。
非空断言其实也是类型断言,只不过是断言为该值不是
null
或
undefined
。