返回

用小例子带你快速掌握TS中的Narroing

前端

Narroing简介

Narroing,中文译为类型缩小,是TypeScript中类型系统的重要组成部分,它允许我们在运行时减少变量或表达式的类型,从而提高代码的类型安全性。
在TypeScript中,Narroing通常通过以下方式实现:

  • 使用条件语句进行类型缩小
  • 使用类型守卫进行类型缩小
  • 使用工具类型进行类型缩小

通过小例子快速掌握Narroing

为了更好地理解Narroing,我们来看一个小例子:

function getLength(param: string | number): number {
  if (typeof param === "string") {
    return param.length;
  } else {
    return param.toString().length;
  }
}

在这个函数中,我们使用了一个条件语句来进行类型缩小。当param是字符串类型时,我们返回它的长度;当param是数字类型时,我们先将其转换为字符串,然后返回它的长度。

这个例子的关键点在于,我们使用了typeof操作符来获取param的类型。typeof操作符可以返回一个变量或表达式的类型。在上面的例子中,typeof param返回"string" | "number"

使用条件语句进行类型缩小是一种常见的方法。除了条件语句之外,我们还可以使用类型守卫来进行类型缩小。类型守卫是一种特殊类型的函数,它可以用来确定一个变量或表达式的类型。

function isString(param: any): param is string {
  return typeof param === "string";
}

这个函数是一个类型守卫。它接收一个参数,并返回一个布尔值,表示该参数是否是字符串类型。

我们可以在代码中使用类型守卫来进行类型缩小:

function getLength(param: string | number): number {
  if (isString(param)) {
    return param.length;
  } else {
    return param.toString().length;
  }
}

上面的代码与之前的代码等效。但是,使用类型守卫可以让代码更加清晰和易读。

除了条件语句和类型守卫之外,我们还可以使用工具类型来进行类型缩小。工具类型是一种特殊的类型,它可以用来操作其他类型。

type StringLength = string extends (infer R)[] ? number : never;

上面的代码定义了一个工具类型StringLength。这个工具类型可以用来获取字符串的长度。

我们可以使用工具类型来进行类型缩小:

function getLength<T extends string>(param: T): number {
  return param.length;
}

上面的代码使用工具类型StringLength来对参数param进行类型缩小。这意味着,只有当param是字符串类型时,这个函数才能被调用。

总结

Narroing是TypeScript中类型系统的重要组成部分,它允许我们在运行时减少变量或表达式的类型,从而提高代码的类型安全性。我们可以通过使用条件语句、类型守卫和工具类型来实现Narroing。

掌握Narroing可以帮助我们编写出更加健壮和可靠的TypeScript代码。