您现在的位置是:亿华云 > 数据库
使用 TypeScript 中的 Any 类型前,你需要了解的一切
亿华云2025-10-09 15:06:40【数据库】7人已围观
简介本文转载自微信公众号「三分钟学前端」,作者 sisterAn 。转载本文请联系三分钟学前端公众号。any在 TypeScript 中,任何类型的值都可以赋值给 any , any 也可以赋值给任意类型
本文转载自微信公众号「三分钟学前端」,使用作者 sisterAn 。型前需解转载本文请联系三分钟学前端公众号。使用
any
在 TypeScript 中,型前需解任何类型的使用值都可以赋值给 any , any 也可以赋值给任意类型,型前需解因此,使用any 类型通常也被称为 top type
let notSure: any // 可以被赋值任意类型 notSure = sisterAn! notSure = 512 notSure = { hello: () => Hello sisterAn! } // 它也兼容任何类型 let num: number = 12 notSure = num num = notSureany 类型用于描述一个我们根本不知道类型的型前需解变量,或者说可以是使用任意类型的变量,常用于用户的型前需解输入或第三方代码库(不确定用户输入值的类型,第三方代码库是使用如何工作的),当我们刚接触 TypeScript 时,型前需解 或把 JavaScript 迁移至 TypeScript 时,使用经常会使用它,型前需解毕竟一写 any ,使用什么报错都没了
但大量使用 any 类型并不好,any 类型会提供一个类型系统的「后门」,当使用 any 时,你基本上是在告诉 TypeScript 编译器不要进行任何的类型检查。没有强制的类型检查,这在项目开发过程中可能会带来一些问题。
any 的高防服务器问题
1. 类型污染
any 类型的对象会导致后续的属性类型都会变成 any :
let user: any = { sister: { name: sisterAn } }; let sister = user.sister // any let url = sister.url // any2. 使用不存在的属性或方法而不报错
const notSure: any = sisterAn notSure.hello() // no error所以,建议能不用 any 别用 any ,尽量少的使用 any
使用 any 更简单的场景,如何停止使用?
1. 添加类型时,我必须编写大量代码,any 工作量较少
可能不是,如果编写的代码为 any 类型,我们可能需要添加防御性代码,以确保参数和变量具有正确的类型,以使程序能够按预期执行。any 甚至无法防范 null 或 undefined
2. 我已经通过必要的运行时检查以防御性的方式编写了代码,以确保没有错误
现在可能没有错误,但是除非你有很好的测试覆盖率,否则以后来修改代码的人不会相信他们不是在错误中重构;就好像编译器不会帮你,因为我们说过它不会帮你。如果我们显式地设置类型并更改系统中使用的API,编译器将提供它的指导。b2b供应网
3. 有些参数很难正确输入,但是 any 更容易
如果我们将一些很难确定类型的输入定义为 any 类型,那么我们在后期如果没有正确地输入,将会造成编写错误,比我们在 JavaScript 会编写更多的错误,既然我们已经强制使用了 TypeScript ,就应该去利用它的特性,强制检查不正确的类型
4. 我真的不知道参数是什么
没关系! 我们可以用 unknown ; 它允许我们确实分配任何类型。但在确定特定类型之前,我们将不允许使用这些值。
function getName() { return sisterAn } let sisterAn: unknown = getName() sisterAn.hello() //Object is of type unknown5. 类型增加了很多复杂性,有时 any 更简单
使用 any 可能允许我们在不考虑数据如何流入逻辑的情况下更简单的开发。但它将这个负担会转移到我们代码的后期维护人、重构人身上。他们将不得不在没有上下文和编译器帮助的情况下理解项目是如何运行的,
总结
所以,我们能不用 any 别用 any :
它使编译器过时了,我们告诉编译器:我不需要你的帮助 我们放弃了在编写代码时记录代码的机会 我们的服务器租用第一道防线被攻破了 在动态语言中,我们假设事物可以有 any 类型,我们采用的模式遵循这个假设。如果我们开始使用静态类型语言作为动态语言,那么我们就是在与范式作斗争 当我们继续对代码库进行更改时,没有什么可以指导/帮助我们。 自由越大,责任越大(编译器)。不要变成一个编译器,我们的目的是使用编译器。参考
TypeScript:请停止使用 any
来源:https://github.com/Advanced-Frontend/Daily-Interview-Question
很赞哦!(54)
相关文章
- 4、企业无形资产:通用网站已成为企业网络知识产权的重要组成部分,属于企业的无形资产,也有助于提升企业的品牌形象和技术领先形象。它是企业品牌资产不可或缺的一部分。
- Github标星5300+,专门为程序员开发文档开源管理系统,我粉了
- 2019 年女性程序员报告:掌握 C、Java 和 C++ 的人最多
- TIOBE榜单发布:超越Python!C语言荣获 2019 年度最佳编程语言
- 顶级域名可以增加企业品牌的价值。随着经济的快速发展,域名已不再是企业在网络中的独立地位。顶级域名的服务范围、企业产品、综合形象体现等,对于企业单位来说,顶级域名的重要性不言而喻。
- 动画:一个浏览器是如何工作的?
- Google 开源的 Python 命令行库:初探 fire
- 常用的互联网架构模式,都在这里了
- 4、说起来容易
- 离职补偿变敲诈勒索款,华为前员工被拘251天
站长推荐
3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
知识图谱不复杂,我来帮你理一理!
值得推荐的8个Git/Github项目数据分析工具
JavaScript中Promise使用、原理以及实现过程
3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
从 VSCode 看大型 IDE 技术架构
如果你打算在2020年学习Java,千万别错过这些书
图解Kubernetes应用部署