news 2026/7/23 20:34:27

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/7/15 10:24:36

基于Vue的数字图书馆设计与开发793m5(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末

系统程序文件列表 系统功能 用户,图书类别,图书信息 开题报告内容 一、 课题背景、研究目的与意义 1. 课题背景 随着信息技术的高速发展和数字化转型的深入推进,传统图书馆的服务模式面临诸多挑战:空间限制导致藏书容量有限,纸质资源易损…

作者头像 李华
网站建设 2026/7/23 5:25:34

基于spring boot的调查问卷系统的设计与实现(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。一、程序背景在当前信息化快速发展的大环境下,传统纸质问卷调查存在效率低下、成本高昂、地域…

作者头像 李华
网站建设 2026/7/15 14:05:32

为什么你的测试覆盖率是“静态的”?因为你没做“动态分析”

覆盖率指标的迷思 在软件测试领域,测试覆盖率常被视为质量保证的黄金标准,但许多团队发现,即使覆盖率数字高达90%,上线后仍频发缺陷。这种矛盾源于覆盖率指标的“静态化”——它仅反映代码被扫描的比例,却忽略运行时行…

作者头像 李华
网站建设 2026/7/19 7:32:59

NetApp数据平台助力Super Bowl LX实现高效数据运营

智能数据基础设施全面赋能Levi’s Stadium,显著提升球迷观赛体验 NetApp(NASDAQ:NTAP)智能数据基础设施公司今日宣布,其正为Super Bowl LX提供数据运营支持。作为旧金山49人队及美国国家橄榄球联盟(NFL&…

作者头像 李华
网站建设 2026/7/19 7:21:30

Thinkphp和Laravel学生档案管理系统_8xpgg

目录ThinkPHP与Laravel框架的学生档案管理系统对比框架特性开发效率安全性性能表现适用场景项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP与Laravel框架的学生档案管理系统对比 框架特性 ThinkPHP以轻量级和简单易用著称,适…

作者头像 李华