likes
comments
collection
share

TS多了哪些类型

作者站长头像
站长
· 阅读数 22

前言

首先来看,“鼎鼎大名”的any类型

any类型

Any类型的变量可以赋值任意类型的值

let any1: any = 'xxx'

void的类型

void用于表示返回空

如下例子,表示没有返回

function fn():void{
    console.log('This is a fn,but return is void')
}

enum类型

enum枚举类型,可以理解为通过enum关键字声明一个特殊的类型,例如:

enum Direction {
  NORTH,
  SOUTH,
  EAST,
  WEST,
}

let dir: Direction = Direction.NORTH;

通过type声明类型

TS中提供了一些基本类型,另外类也可以当类型。但是有的时候我们需要一些更灵活的类型,这就需要自定义一些类型或者叫类型声明

声明类型需要借助一个关键字type 例如

type User = {
    name: string;
    age?: number;
}

以上代码定义了一个User类型,该类型必须有name属性类型为string,可以选择有或者没有类型为numberage属性

let user: User;
user = {
    name: 'Alice'
}

上述代码,声明一个user变量要求是我们定义的User类型并赋值,赋值时需要值与定义的类型对应

当然不仅仅用于变量,自定义类型跟普通类型一样,可以用于所有能用类型的地方,没有限制,比如函数的形参等等

function show(obj: User) {
    console.log(obj.name)
}
show(user);

可以看到使用type关键字可以很方便的创建一个新类型

tuple 元组类型

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

let x: [string, number];
x = ['hi', 1];

never类型

never类型表示的是那些永不存在的值的类型

比如无法达到的终点的一些函数

function error(message: string): never {
    throw new Error(message);
}

数组类型

表示的就是数组,形式如下所示:

let list: number[] = [1, 2];

泛型数组

泛型数组和数组类型很像,只是格式不一样,比如上面的list数组,写成泛型的形式,如下:

let list: Array<number> = [1, 2];

总结

我们介绍了好多TS中所特有的类型,其实还有几个特有的,比如上篇中提到的Object和{}类型,以及在TS中所有的类都可以作为类型

以上就是本文的所有内容,可能有遗漏,欢迎指正!