news 2026/3/8 14:39:46

Typescript - void 类型(详细入门教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Typescript - void 类型(详细入门教程)

前言

由于 any / unknown 类型几乎 “相似” ,所以可以直接一起学习。

在 Typescript 中,当我们不确定一个类型是什么类型的,可以选择给其声明为 any 或者 unkown。

本文会介绍这两种类型的介绍及其示例用法,最后谈一下二者的区别。

any 类型

在 TypeScript 中,任何类型都可以被归为 any 类型,因为它可以被赋予任何值。

这让 any 类型成为了类型系统的顶级类型(也被称作全局超级类型),如下代码所示:

letnotSure:any=666;notSure="王佳斌";notSure=false;

TypeScript 允许我们对 any 类型的值执行任何操作,而无需事先执行任何形式的检查,如下代码所示:

letvalue:any;value.foo.bar;// OKvalue.trim();// OKvalue();// OKnewvalue();// OKvalue[0][1];// OK

在许多场景下,这太宽松了。使用 any 类型,可以很容易地编写类型正确但在运行时有问题的代码。

如果您使用 any 类型,就无法使用 TypeScript 提供的大量的保护机制。

unknown 类型

为了解决 any 带来的问题,TypeScript 3.0 引入了 unknown 类型。

就像所有类型都可以赋值给 any,所有类型也都可以赋值给 unknown。

这使得 unknown 成为 TypeScript 类型系统的另一种顶级类型(另一种是前面的 any),如下代码所示:

letvalue:unknown;value=true;// OKvalue=42;// OKvalue="Hello World";// OKvalue=[];// OKvalue={};// OKvalue=Math.random;// OKvalue=null;// OKvalue=undefined;// OKvalue=newTypeError();// OKvalue=Symbol("type");// OK

对 value 变量的所有赋值都被认为是类型正确的。

但是,当我们尝试将类型为 unknown 的值赋值给其他类型的变量时会发生什么?

letvalue:unknown;letvalue1:unknown=value;// OKletvalue2:any=value;// OKletvalue3:boolean=value;// Errorletvalue4:number=value;// Errorletvalue5:string=value;// Errorletvalue6:object=value;// Errorletvalue7:any[]=value;// Errorletvalue8:Function=value;// Error

unknown 类型只能被赋值给 any 类型和 unknown 类型本身。直观地说,这是有道理的:只有能够保存任意类型值的容器才能保存 unknown 类型的值。毕竟我们不知道变量 value 中存储了什么类型的值。

现在让我们看看当我们尝试对类型为 unknown 的值执行操作时会发生什么。以下是我们在之前 any 看过的相同操作:

letvalue:unknown;value.foo.bar;// Errorvalue.trim();// Errorvalue();// Errornewvalue();// Errorvalue[0][1];// Error

将 value 变量类型设置为 unknown 后,这些操作都不再被认为是类型正确的。通过将 any 类型改变为 unknown 类型,我们已将允许所有更改的默认设置,更改为禁止任何更改。

二者区别

其实很明显,可以用以下表格表示。

相同点不同点
都可以赋予任意类型的值unknown 类型的值不能直接赋值给其他变量
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/6 6:49:34

‌CI/CD中的“测试数据生成”:自动生成测试数据

在持续集成与持续交付(CI/CD)日益成为软件交付标准的今天,‌测试数据的自动化生成‌已从“可选优化”演变为“质量保障的基础设施”。对于软件测试从业者而言,如何在流水线中高效、合规、可复现地生成高质量测试数据,直…

作者头像 李华
网站建设 2026/3/4 20:35:51

Thinkphp和Laravel小区物业报修管理系统_78ahx

目录 ThinkPHP与Laravel小区物业报修管理系统概述核心功能模块技术实现差异数据库设计关键表部署与扩展建议 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 ThinkPHP与Laravel小区物业报修管理系统概述 小区物业报修管理系统基于ThinkPHP或Lara…

作者头像 李华
网站建设 2026/3/8 9:28:57

Software Features Components 2

12. Built-in 内置的Explanation: Refers to features特征, functions, or components that are integrated into a system, application, or product from the start, rather than being added or installed separately.指的是系统、应用程序或产品从一开始就集成的功能、特…

作者头像 李华
网站建设 2026/3/7 13:42:53

2026年网络安全工程师前景怎么样?网络安全薪资高吗?网络安全零基础入门到精通,看这一篇就够了!

随着互联网的发展和大数据时代的到来, 网络已经日渐深入到我们生活、工作中的方方面面,社会信息化和信息网络化,突破了应用信息在时间和空间上的障碍,使信息的价值不断提高。 但是,与此同时 网页篡改、计算机病毒、…

作者头像 李华
网站建设 2026/3/5 0:28:48

【Android毕设全套源码+文档】基于android的高校教室预约管理平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/6 9:57:48

施耐德伺服驱动器LXM05BD17M2

LXM05BD17M2是施耐德LXM05系列里一款性能很扎实的交流伺服驱动器,特别适合中高速度和高精度定位的应用场景。‌性能特点‌‌核心性能‌:采用无传感器矢量控制技术,动态响应快,稳速精度高,抗负载扰动能力强。‌功率与电…

作者头像 李华