TypeScript 中 void、never、any、unknown 类型的区别与使用场景

作者:拾光

时间:2026-10-31

浏览:195

本文深入解析TypeScript中void、never、any和unknown四种类型的核心差异。通过对比表与代码示例,阐明void用于无返回值函数,never表示不可达代码,any跳过类型检查,而unknown提供类型安全的任意值处理。文章提供了实际开发中的类型定义建议与常见疑问解答,帮助开发者编写更安全的TypeScript代码。

文章目录

TypeScript 的类型系统借助 any、unknown、void、never 实现了灵活的类型管控。本文深入剖析其核心差异,并提供实际开发中的使用建议,助力编写更安全的代码。

类型对比速查表

类型可赋值给任意类型任意值可赋值给它类型安全典型场景
any✔️ 允许✔️ 允许❌ 不安全旧代码兼容、快速调试
unknown❌ 禁止✔️ 允许✔️ 安全安全接收外部数据
void❌ 禁止❌ 禁止✔️ 安全无返回值的函数
never✔️ 允许❌ 禁止✔️ 安全不可达代码、类型收窄

void类型

void代表没有任何类型,无法直接赋值。

let a: void; 
let b: number = a; // 报错

将变量赋值为void并无实际意义。

若函数无返回值,可将其定义为void。

function fn():void {
    console.log('今天天气不错')
}
<a href="javascript:void;" rel="external nofollow" ></a>

never类型

never类型指代永不存在的值。

// 抛出异常
function error(): never {
  throw new Error('我是一个Error'); 
}
// 死循环
function loop(): never {
  while (true) {
    console.log('这里是死循环')
  };
}

any类型

any类型代表任意类型。

let num:number = 1000;
num = "jack" // 报错
let num:any = 1000;
num = "jack" // 不报错
// 调用方法,依然不报错
num.setName('jack')

尽管any不做任何约束,但极不推荐这样使用,这会带来隐患。

在开发组件、模块、定义函数或调用接口时,若类型难以定义或不明所属,可适当使用any类型。

unknown类型

unknown与any类似,所有类型均可分配给unknown,反之将unknown赋值给其它类型会报错。

// unknown 可以接收任意类型
let name:string = "jack"
let user:unknown = name;
// unknown 不可以赋值给其它类型,any除外,下面会报错
let name:unknown = "jack"
let user:string = name;

总结:

  • 能确定类型的,尽量定义类型。
  • 无法确定类型的,可以使用 any 进行兜底。
  • 当函数没有返回值时,可以使用void定义。
  • any和unknown可以接收任意类型值,any可以赋值给任意类型,但unknown不可以赋值给任意类型。

void和any在项目中是比较常见的,never和unknown不常用。

常见疑问

Q:unknown 和 any 的区别?A:unknown 必须显式类型检查后才能使用,而 any 完全跳过类型安全。

Q:函数声明返回 void 却返回了值会怎样?A:TypeScript 不会报错,但这是逻辑矛盾,建议保持声明与实际一致。

Q:什么时候必须用 never?A:当函数永远不会正常返回时(如无限循环),或用于类型收窄的兜底检查。

到此这篇关于TypeScript中void、never、any、unknown类型的区别小结的文章就介绍到这了,更多相关TypeScript void、never、any、unknown内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章