如何理解 TS 中的类型 | 创作者训练营

620 阅读3分钟

上一篇如何理解 TS 中的静态类型检查 讲解了 TS 的核心作用,这篇我们从 TS 类型说起。

TS 中的类型由三部分组成,JS 中原有的类型,TS 扩展的类型,以及新增加的函数返回类型。

JS 中原有的类型

Undefined,Null,Boolean,Number,String,Array

// undefined 和 null 经常以联合类型和其他类型搭配使用
// 联合类型表示或的关系多个关系中的一种

// num 可以是一个数字,也可以是一个 undefined 此处就是初始 num undefined 的类型
// 如果此时只给 number 类型就会类型检查报错
let num: number | undefined | null ;

let isSwitch: boolean = true;

let str:string = 'liuliuqi';

// 表示数组的每个成员都是 number 
// 如果数组的成员既要是 number 也要是 string 的时候应该要怎么定义?
let arrNumber:number[] = [1, 2, 3];

细心的朋友可能会发现,我们没有提及 Object 类型。官网上对 Object 类型解释如下:

object is a type that represents the non-primitive type, i.e. anything that is not number, string, boolean, bigint, symbol, null, or undefined. With object type, APIs like Object.create can be better represented. Generally, you won’t need to use this.

object 是代表非基本类型的类型,即不是数字,字符串,布尔值,bigint,symbol,null或undefined的任何类型。使用对象类型,可以更好地表示Object.create之类的API。通常,你不需要使用它。

interface ObjectConstructor {
  create(o: object | null): any;
  setPrototypeOf(o: any, proto: object | null): any;
}

Object 原型链上的方法 create / setPrototypeOf 等方法的入参数类型限制为 object

TS 中扩展的类型

Enum,  Any,Tuple(元组)

// 定义了枚举类型 Color
// 如果未赋值,默认的值为索引,从 0 开始
// 如果某个子项赋值,则以此子项为基础往后递增的索引
enum Color {
  Red,
  Green,
  Blue,
}
enum ColorTwo {
  Red = 3,
  Green,
  Blue,
}
let c: Color = Color.Green;
let c2: ColorTwo = Color.Green;

console,log(c) // 1
console,log(c2) // 4
// Any 表示是任意类型
let liuliuqi:any;

liuliuqi = 18;
liuliuqi = 'qbc';
liuliuqi = false;

前面提到如果数组的成员既要是 number 也要是 string 的时候应该要怎么定义?元组就是解决这个问题的。

元组是对数组的拓展,表示已知元素数量和类型的数组

let arrStrNumber:[string, number] = ['liuliuqi', 18];

TS 中函数返回类型

Void,  Never 

// void 表示不返回类型 通常作为不会值的函数返回类型

function handle():void {
  console,log('void no return');
}

// never 表示永不出现的值的类型。通常用在异常抛出函数中
function error(message: string): never {
  throw new Error(message);
}

以上就是 TS 中涉及的类型。

下一篇写:如何理解 TS 中的接口

「 一枚前端学习小透明,努力学习前端知识中,同时分享自己对生活的一些思考,欢迎一起讨论交流。如果我的文章对你有帮助,请点个赞,会非常感恩你的鼓励。完」

如何理解 TS 中的类型 | 创作者训练营 征文活动正在进行中......