03:TypeScript 常用数据类型
2023-07-19 09:15:56
86

文章封面

一、基本类型

1. number

let num: number = 1;

2. string

let name: string = "Heylzh";

3. boolean

let flag: boolean = true;

4. symbol

let sym: symbol = Symbol("symbolType");

5. null

let value: null = null;
// 拓展:null值不仅能赋值给null类型
let value1: any = null;
let value2: unknown = null;

6. undefined

let value: undefined = undefined;
// 拓展:undefined值不仅能赋值给undefined类型
let value1: any = undefined;
let value2: unknown = undefined;

二、根类型

7. Object / {}
可以理解为是除了 nullundefined 以外所有类型的根类型,所以可以赋值给除了 nullundefined 以外的任何值。

let value: Object = 1;
value = "1";
value = true;
value = {
  name: "Tom",
};

三、对象类型

8. Array

let Arr: Array<any> = [];
let Arr1: any[] = [];

9. object

let obj: object = { name: "Tom" };

10. function

const fun: () => void = () => { };
fun();

type Fun = (param: number) => number;
const fun1: Fun = (param) => { return param }
fun1(1);

四、枚举

代替常量、语义化
11. 数字枚举
数字枚举可以双向取值,默认枚举值从0开始递增。

enum Status {
  "auto",
  "open",
  "close",
}
console.log(Status.close); // 2
console.log(Status["close"]); // 2
console.log(Status[1]); // open

自定义枚举值

enum Status {
  "auto",
  "open" = 3,
  "close",
}
console.log(Status.auto); // 0
console.log(Status.close); // 4
console.log(Status["close"]); // 4
console.log(Status[1]); // undefined
console.log(Status[3]); // open

12. 字符串枚举
字符串枚举不支持双向取值

enum Status {
  "auto" = "默认",
  "open" = "打开",
  "close" = "关闭",
}
console.log(Status.close); // 关闭
console.log(Status["close"]); // 关闭
console.log(Status["关闭"]); // 报错

字符串枚举中使用数字递增

enum Status {
  "auto" = "默认",
  "open" = 1,
  "close",
}
console.log(Status.auto); // 默认
console.log(Status["auto"]); // 默认
console.log(Status[0]); // undefined
console.log(Status[1]); // open
console.log(Status["open"]); // 1
console.log(Status[2]); // close
console.log(Status["close"]); // 2

相关资料:枚举双向取值原理

五、其他类型

13. any

let value: any = 1;
value = "str";
value = true;
value = {
  name: "Tom",
  age: 1,
};

14. unknown

待补充

15. never

type Val = string | number;
const fun = (val: Val) => {
  switch (typeof val) {
    case "string":
      console.log(val.concat("- is string"));
      break;
    case "number":
      console.log(val.toFixed(2));
      break;
    default:
      /**
       * 当判断完val所有可预见的类型,再没有其他可能,此时val类型是 never
       * ---------------------
       * 假设后续将类型 Val 拓展为 string | number | boolean; 此时val类型为 boolean
       * 下面赋值语句将报错。可以以此来提示开发者拓展类型的同时要为该类型补充逻辑代码,防止程序漏洞
       */
      let _val: never = val; // 编译前报错,不能将类型“boolean”分配给类型“never”
      throw Error("未定义该类型方法"); // 编译后报错
      break;
  }
};
fun(123);

16. void

待补充

17. 元组

待补充

18. 可变元组

待补充

六、合成类型

19. 联合类型

let value: string | number = "str";
// 给定值后确定类型,可调用该类型方法
console.log(value.length);
value = 1;
console.log(value.toFixed(2));

20. 交叉类型

type Obj1 = {
  name: string;
};
let obj1: Obj1 = { name: "Tom" };

type Obj2 = {
  age: number;
};
let obj2: Obj2 = { age: 1 };

let obj3: Obj1 & Obj2 = { name: "jack", age: 2 };

七、字面量类型

21. 字面量类型

type Status = 1 | 2 | 3;
const fun = (status: Status) => { }
fun(1)
如有帮助,点赞鼓励一下吧!
评论
一键登录