详细聊聊TypeScript中any unknown never和void的区别

 更新时间:2023年07月04日 09:26:23   作者:前端呆头鹅  
这篇文章主要给大家聊聊TypeScript 中 any、unknown、never 和 void 有什么区别,文中有详细的代码实例讲解,具有一定的参考价值,需要的朋友可以参考下

一 unknown: 未知类型

unknown: 未知类型是typescript 3.0 中引入的新类型。

1.1 所有类型的字面量都可以分配给unknown类型

unknown未知类型,代表变量类型未知,也就是可能为任意类型,所以, 所有类型的字面量都可以分配给unknown类型。
这里声明一个unknown的变量,先后为其赋值字符串、数字和对象类型的字面量取值,都可以成功赋值。

let notSure: unknown = 'sisterAn!'
// 可以被赋值任意类型
notSure = 'sisterAn!'
notSure = 512
notSure = { hello: () => 'Hello sisterAn!' }

1.2 unknown 类型不允许给 any 或 unknown 以外的变量赋值

unknown 未知变量,既然类型未知,也就无法赋值给具体的某个类型,unknown 未知变量不允许给 any 或 unknown 以外的变量赋值。

两个未知变量之间可以相互赋值

let notSure: unknown = 2
let notSure1: unknown = 'Hello'
notSure = notSure1

未知变量和any变量可以相互赋值

let notSure: unknown = 2
let any1: any = 12
notSure = any1
any1 = notSure

未知变量不可以为其他变量赋值

let notSure: unknown = 2
let num: number = 12
notSure = num
any1 = notSure
num = notSure // error: Type 'unknown' is not assignable to type 'number'.

1.3 unknown 类型变量不可以执行具体类型的方法

unknown 类型变量不可以执行具体类型的方法,即使它真的是这个类型,除非你使用断言。

let notSure: unknown = 'sisterAn'
let num: number = 12
notSure = num
notSure.toLowerCase()
// error: Object is of type 'unknown'.

二 never:永不存在的值

never类型表示的是那些永不存在的值的类型。

2.1 never:执行中断的函数返回值类型

never通常用来指由于种种原因,函数没有执行到最后,导致不存在返回值的返回值类型。

示例一:抛出异常会直接中断程序运行,这样程序就运行不到返回值那一步了,即具有不可达的终点,也就永不存在返回了

function error(msg: string): never {
    throw new Error(msg);
} 

示例二:死循环,同样程序永远无法运行到函数返回值那一步,即永不存在返回。

function loopForever(): never {
    while (true) {};
}

2.2 never可以赋值给任何类型,但是不能被赋值

never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

三 void:函数无返回值

函数则无返回值或者返回 undefined。

function a(): number { // ERROR: 其声明类型不为 "void" 或 "any" 的函数必须返回值
  console.log(123)
}
function a(): void {
  console.log(123)
}

你只能为它赋予undefined和null。

let a: void = 1 // ERROR: 不能将类型“number”分配给类型“void”
let a: void = undefined

四 any:在编译时可选择地包含或移除类型检查

any实际上是跳过类型检查的过程,所以允许你给它赋任意值,也可以调用任意的方法。相比较来说,Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法。

到此这篇关于详细聊聊TypeScript中any unknown never和void的区别的文章就介绍到这了,更多相关ypeScript中any unknown never和void区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js实现固定显示区域内自动缩放图片的方法

    js实现固定显示区域内自动缩放图片的方法

    这篇文章主要介绍了js实现固定显示区域内自动缩放图片的方法,实例分析了javascript操作页面元素及属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Webpack打包css后z-index被重新计算的解决方法

    Webpack打包css后z-index被重新计算的解决方法

    这篇文章主要跟大家分享了Webpack打包css后z-index被重新计算的解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • IE下JS读取xml文件示例代码

    IE下JS读取xml文件示例代码

    JS读取xml文件具体步骤为:创建DOM对象、加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助
    2013-08-08
  • 前端安全之DOMPurify基础安装与用法

    前端安全之DOMPurify基础安装与用法

    这篇文章主要介绍了前端安全之DOMPurify基础安装与用法的相关资料,DOMPurify是防御XSS攻击的HTML净化库,支持npm/yarn安装及CDN引入,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • 微信小程序自定义Modal弹框

    微信小程序自定义Modal弹框

    这篇文章主要为大家详细介绍了微信小程序自定义Modal弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JavaScript进阶(三)闭包原理与用法详解

    JavaScript进阶(三)闭包原理与用法详解

    这篇文章主要介绍了JavaScript闭包原理与用法,结合实例形式详细分析了JavaScript闭包相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • JavaScript树形菜单功能实现方法总结

    JavaScript树形菜单功能实现方法总结

    树形菜单是前端开发中常见的交互组件,用于展示具有层级关系的数据(如文件目录、分类列表、组织架构等),这篇文章主要介绍了JavaScript树形菜单功能实现方法的相关资料,需要的朋友可以参考下
    2025-08-08
  • 一文带你掌握JavaScript异步编程的五种方式

    一文带你掌握JavaScript异步编程的五种方式

    异步可以理解为把一个任务分成了两段,先执行第一段,转而去执行其它任务,等准备完毕后,再回过头来执行第二段, 本文主要来和大家聊聊JavaScript异步编程的五种方式,感兴趣的可以了解下
    2025-07-07
  • 检查表单元素的值是否为空的实例代码

    检查表单元素的值是否为空的实例代码

    这篇文章主要介绍了检查表单元素的值是否为空的实例代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试

    Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试

    偶然发现的,页面中没有引入Prototype和jQuery。控制台中敲$却发现是一个函数。又试着敲$$,也是个function
    2012-02-02

最新评论