TypeScript中void、never、any、unknown类型的区别小结

 更新时间:2026年05月13日 09:29:22   作者:汐语W  
本文主要介绍了TypeScript中void、never、any、unknown类型的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

TypeScript 的类型系统通过 anyunknownvoidnever 提供了灵活的类型控制能力。本文将解析它们的核心差异,并给出实际开发中的使用建议,帮助我们写出更安全的代码。

类型对比速查表

类型可赋值给任意类型任意值可赋值给它类型安全典型场景
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类型

unknownany一样,所有类型都可以分配给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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现数组浅拷贝和深拷贝的方法

    JS实现数组浅拷贝和深拷贝的方法

    浅拷贝创建一个新的对象,来接受重新复制或引用的对象值,如果对象属性是基本的数据类型,复制的就是基本类型的值给新对象,这篇文章主要介绍了js实现数组浅拷贝和深拷贝,需要的朋友可以参考下
    2024-01-01
  • JS闭包原理与应用经典示例

    JS闭包原理与应用经典示例

    这篇文章主要介绍了JS闭包原理与应用,结合实例形式较为详细的分析了javascript闭包的原理、应用及相关操作注意事项,需要的朋友可以参考下
    2018-12-12
  • js输入中文效果

    js输入中文效果

    js输入中文效果...
    2006-09-09
  • JavaScript检测并限制复选框选中个数的方法

    JavaScript检测并限制复选框选中个数的方法

    这篇文章主要介绍了JavaScript检测并限制复选框选中个数的方法,涉及javascript针对复选框的判定与运算相关技巧,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • layui 富文本编辑器和textarea值的相互传递方法

    layui 富文本编辑器和textarea值的相互传递方法

    今天小编就为大家分享一篇layui 富文本编辑器和textarea值的相互传递方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • javascript学习总结之js使用技巧

    javascript学习总结之js使用技巧

    本篇文章给大家分享javascript学习总结之js使用技巧,都是精华喔~小伙伴快来学习吧。
    2015-09-09
  • hash和history路由模式区别示例解析

    hash和history路由模式区别示例解析

    这篇文章主要为大家介绍了hash和history路由模式区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • JS实现网页烟花动画效果

    JS实现网页烟花动画效果

    这篇文章主要为大家详细介绍了JS实现网页烟花动画效果,点击鼠标烟花向四周扩散,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 使用JavaScript下载图片并保存到本地超详细实例代码

    使用JavaScript下载图片并保存到本地超详细实例代码

    在JavaScript(JS)中,图片下载通常涉及到前端与后端的交互,下面这篇文章主要介绍了使用JavaScript下载图片并保存到本地的相关资料,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • JS实现页面数据无限加载

    JS实现页面数据无限加载

    这篇文章主要为大家详细介绍了JS实现页面数据无限加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论