4、TS_类型(字面量、联合类型、any(显示与隐式)、unknown、void 和 never)

57 阅读2分钟

类型

类型例子描述
number-1 , 0 , 1...任意数字
string'hello' , 'good'...任意字符串
booleantrue , false布尔值 true 或 false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknown*类型安全的any
void空值 ( undefined )没有值 或 undefined
never没有值不能是任何值
object{name:'David',age:13}任意的 JS 对象
array[1,2,3]任意的 JS 数组
tuple[4,5]元素,TS新增类型,固定长度数组
enumemun {A,B}枚举, TS中新增类型

object(对象)

像为对象限制类型,可以直接使用 object 这个类型(但不建议用!!!),因为 函数和数组也是对象,这样就无法做到很好的限制了

let obj:object

obj = function(){}  //可以
obj = []  //可以
obj = 1   //不能将类型“number”分配给类型“object”

obj = {}  //可以

我们可以为 object 类型,这样限制

let obj: { name: string; age?: number };

这样还可以限制对象里的属性, (? 指的是可选,可以有,也可以没有)


如果我们有这样一个需求:一个对象里必须有name属性为string,其它任意属性可有可无,怎么限制类型呢?

[propName:string]:any

[propName:string]:any 表示任意类型的属性

let obj:{name:string,[propName:string]:any}

obj = {
  name:'David'
}

obj = {
  name:'David',
  a:123,
  b:'234',
  fun:()=>{}
}

array(数组)

两种方式:string[]、Array< string >

// 声明 string 类型的数组(只支持数组里面有string类型)
let arr: string[];
arr = ["123", "ab"];

// 声明 number 类型的数组(只支持数组里面有number类型)
let arr: number[];
arr = [123, 456];

// 声明 number 类型的数组(只支持数组里面有number类型)
let arr:Array<number>

tuple(元组)

元组就是固定长度的数组,每个索引处有对应的类型

// 声明一个元组,只允许有两个值,第一个是string,第二个是number
let arr3:[string,number]
arr3 = ['aa',123]

enum 枚举

// 声明 性别 枚举
enum GenderEnum {
  Male = 0,
  Female = 1
}

let person: { name: string; gender: GenderEnum };

person = {
  name: "David",
  gender: GenderEnum.Male,
};

// 通过 枚举的属性判断性别
if (person.gender === GenderEnum.Male) {
  console.log("酷酷的");
} else {
  console.log("美美的");
}

之所以用枚举,是因为有一些数字代表了特别的意义,通过枚举可以语义化,也可以减少一些此类的注释


扩展

& (表示同时)

// 表示 person对象中,既要有 name属性类型为string,也要有gender属性类型为string
let person: { name: string } & { gender: string };

person = {
  name: "David",
  gender: "male",
};

类型的别名

//  将上面的类型 用 commonType 声明,之后用到这样的类型时,都直接用 commonType即可
type commonType = 1|2|3|4|5
let type1:commonType
let type2:commonType