TypeScript的六个类型

3,515 阅读2分钟

一、元组

元组可以看作是数组的拓展,表示已知元素数量和类型的数组。也就是说已知数组中每一个位置上元素的类型

let tuple: [string, number, boolean];
tuple = ["a", 2, false];
tuple = [2, "a", false]; // error 不能将类型“number”分配给类型“string”。 不能将类型“string”分配给类型“number”。
tuple = ["a", 2]; // error Property '2' is missing in type '[string, number]' but required in type '[string, number, boolean]'

二、枚举

枚举可以看作是给数值赋予名字

enum Roles {
  SUPER_ADMIN = 0,
  ADMIN = 1,
  USER = 2
}

console.log(Roles.SUPER_ADMIN) //0

也可以通过值来获取到名字
console.log(Roles[1]) // ADMIN 

三、Any

Any表示赋予任何值都可以,即任意类型

let value: any;
value = 123;
value = "abc";
value = false

也可以在定义数组类型时使用 any 来指定数组中的元素类型为任意类型

const array: any[] = [1, "a", true];

四、void

void表示没有任意类型,与Any相反

const consoleText = (text: string): void => {
  console.log(text);
};  //没有返回值

void类型的变量只能赋值为undefined和null,其他类型不能赋值给void类型的变量

五、never

never指那些永远不存在的值的类型,它是那些总会抛出异常或根本不会有返回值的函数表达式的返回值类型。

const errorFunc = (message: string): never => {
  throw new Error(message);
};
const infiniteFunc = (): never => {
  while (true) {}
};

六、unknown

nuknown表示未知类型

拓展

交叉类型

交叉类型就是取多个类型的并集,使用 & 符号定义,被&符链接的多个类型构成一个交叉类型,
表示这个类型同时具备这几个连接起来的类型的特点
const merge = <T, U>(arg1: T, arg2: U): T & U =>{  let res = <T & U > {};  res = Object.assign(arg1, arg2)  return res}const info1 = {  name: 'Lison'}const info2 = {  age: 18}const ListInfo = merge(info1,info2)console.log(ListInfo) // Object

联合类型

联合类型实际是几个类型的结合,但是和交叉类型不同,联合类型是要求只要符合联合类型中任意一种类型即可,它使用 | 符号定义。当我们的程序具有多样性,元素类型不唯一时,即使用联合类型。

const getLength = (content: string|number): number => {  if(typeof content === "string"){    return content.length  }else{    return content.toString().length  }}console.log(getLength("abcd")) //4console.log(getLength(1234)) //4