news 2026/4/17 8:35:30

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/4/1 9:41:04

基于C++构建DeepSeek大模型推理SDK:从架构设计到工程落地

这里写目录标题前言一、 云端环境配置与鉴权机制二、 C SDK 核心数据结构设计1. 消息与配置实体2. 模型信息与会话管理三、 抽象接口层设计:策略模式的应用四、 DeepSeek 适配器实现1. 初始化逻辑2. 信息查询接口五、 单元测试与质量保证1. 测试环境构建2. 日志系统…

作者头像 李华
网站建设 2026/4/16 15:27:16

在GitLab CI中实现测试用例版本回滚

为什么测试用例需要版本回滚?‌ 在持续集成/持续交付(CI/CD)日益普及的今天,软件测试团队面临的核心挑战不再是“是否自动化”,而是“如何保证测试环境的可重现性与一致性”。 当一个新提交的测试脚本在CI流水线中失败…

作者头像 李华
网站建设 2026/4/17 19:36:34

Java人工智能开发:JBoltAI场景的全链路探索

在AI技术日新月异的今天,如何高效利用AI进行场景开发、构建学习平台以及落地应用解决方案,成为众多开发者与企业关注的焦点。JBoltAI作为一款专为Java企业打造的AI应用开发框架,凭借其强大的技术实力和丰富的功能特性,为开发者提供…

作者头像 李华
网站建设 2026/4/17 22:23:04

从Postman到AI测试平台:2026年API测试工具全景图

引言:API测试工具的范式转移 2026年的API测试领域正经历从单一功能工具向智能一体化平台的革命性转变。随着微服务架构的普及和AI技术的渗透,测试工具的核心价值已从基础请求调试升级为全生命周期质量保障。这一转型不仅重构了工具技术栈,更…

作者头像 李华
网站建设 2026/4/11 20:41:48

如何用LangChain构建你的私人AI测试助手?

现代测试工作流正经历智能化变革。根据Gartner 2024年报告,80%企业将AI测试工具纳入关键基础设施。LangChain通过模块化架构实现四大核心能力:智能中枢:集成GPT-4/Mistral等模型处理自然语言指令记忆系统:ConversationBufferMemor…

作者头像 李华