TypeScript 中 any、never、unknown、null & undefined 和 void 有什么区别【热度: 334】

关键词:TS 类型

在 TypeScript 中,anyneverunknownnull & undefined 以及 void 都是类型系统的一部分,各自具有不同的用途和含义,下面是它们的主要区别:

any

  • 含义any 类型表示任何 JavaScript 值都可以赋值给它。使用 any 类型,可以绕过 TypeScript 的静态类型检查。
  • 用途:适用于你不想给变量设置具体类型的情况,或者在迁移旧 JavaScript 项目到 TypeScript 时临时使用。
  • 示例
    let anything: any = "Hello world";
    anything = 25; // ok
    anything = false; // ok

never

  • 含义never 类型表示永远不存在的值的类型。例如,never 类型是那些总是抛出异常或根本就不会有返回值的函数表达式或箭头函数的返回类型。
  • 用途never 用于表示那些总是异常或无限循环的函数返回类型,或者用在永远不可能有匹配结果的类型守卫条件。
  • 示例
    function error(message: string): never {
      throw new Error(message);
    }

unknown

  • 含义unknown 类型表示任何值。它类似于 any,但是更安全,因为对 unknown 类型的值执行大多数操作都是不允许的,直到我们通过类型检查缩小了该值的类型。
  • 用途:当我们不确定将要使用的变量的类型时可以使用 unknown 类型,它是 any 类型的类型安全等价物。
  • 示例
    let uncertainValue: unknown = 4;
    uncertainValue = "maybe a string instead";
    // TypeScript会阻止你执行不安全的操作
    // console.log(uncertainValue.length); // Error

null & undefined

  • 含义nullundefined 在 TypeScript 里分别有各自的类型,分别叫做 nullundefinednull 是一个表示无值的特殊值,而 undefined 表示未定义。
  • 用途nullundefined 分别用于表示变量的“空”或“未定义”状态。
  • 示例
    let empty: null = null;
    let notDefined: undefined = undefined;

void

  • 含义void 类型与 anyneverunknown 不同,它表示没有任何类型。在函数中使用 void 类型,表示该函数没有返回值。
  • 用途:主要用在没有返回值的函数的返回类型注解上。
  • 示例
    function warnUser(): void {
      console.log("This is a warning message");
    }

总结如下:

  • any 允许你对值执行任何操作,但是使用它会放弃类型检查的保护。
  • never 用于函数永远不会正常结束的返回类型。
  • unknown 用在不确定类型时,比 any 更安全因为它不允许你随便操作这个值。
  • nullundefined 用于表示没有值或值未定义。
  • void 用于没有返回任何值的函数。