当前位置: 首页 > 科技观察

在TypeScript中使用Any类型之前你需要知道的一切

时间:2023-03-14 14:42:23 科技观察

转载本文请联系三分钟学习前端公众号。any在TypeScript中,任何类型的值都可以赋给any,any也可以赋给任何类型。所以any类型通常被称为toptypeletnotSure:any//可以赋值给任何类型notSure='sisterAn!'notSure=512notSure={hello:()=>'HellosisterAn!'}//也兼容任何类型letnum:number=12notSure=numnum=notSureany类型用来描述一个我们根本不知道类型的变量,也可以是任何类型的变量,常用于用户输入或第三方代码库(不确定用户输入值的类型,第三方代码库是如何工作的),在我们刚开始接触TypeScript的时候,或者在将JavaScript迁移到TypeScript的时候,我们经常会用到它,毕竟随便写一次,就不会出错。但是大量使用any类型并不好。any类型为类型系统提供了一个“后门”。当使用any时,你基本上是在告诉TypeScript编译器不要做任何事情。类型检查。没有强制类型检查,在项目开发过程中会出现一些问题。any的问题1.类型污染任何类型的对象都会导致后续的属性类型变成any:letuser:any={sister:{name:'sisterAn'}};letsister=user.sister//anyleturl=sister.url//任何2。使用不存在的属性或方法不报错constnotSure:any='sisterAn'notSure.hello()//noerror所以建议用any代替any,比较简单的场景尽量少用any,如何停止使用?1.我在添加类型的时候要写很多代码,any是少工作可能不行,如果写的代码是any类型,我们可能需要添加防御代码来确保参数和变量的类型正确,这样程序按预期执行。any甚至不能防止null或undefined2。我以防御方式编写代码,并进行必要的运行时检查以确保没有错误,现在可能没有错误,但除非你有良好的测试覆盖率,否则稍后修复代码人们不会相信他们是没有错误地重构;好像编译器不会帮助你,因为我们说过它不会。如果我们显式设置类型并更改系统中使用的API,编译器将提供其指导。3、有些参数输入正确比较困难,但输入任何一个都比较容易。如果我们将一些难以确定的输入定义为任意类型,那么如果我们后面输入不正确,就会导致编写错误,这比我们用JavaScript写的要好。更多的bug,既然我们已经强制使用TypeScript,我们应该利用它的特性,强制检查不正确的类型4.我真的不知道参数是什么,这无关紧要!我们可以使用unknown;它允许我们实际分配任何类型。但在确定特定类型之前,我们不会允许使用这些值。functiongetName(){return'sisterAn'}letsisterAn:unknown=getName()sisterAn.hello()//Objectisoftype'unknown'5.类型增加了很多复杂性,有时any更简单。没有流程逻辑更容易开发。但它会把这个负担转嫁到我们代码的后期维护者和重构者身上。他们将不得不了解项目如何在没有上下文和编译器帮助的情况下工作,总而言之,我们可以不用任何不使用任何:它使编译器过时,我们告诉编译器:我不需要你的帮助我们放弃了在编写代码时记录代码的机会。我们的第一道防线被攻破了。在动态语言中,我们假设事物可以有任何类型,我们采用的模式也遵循这个假设。如果我们开始将静态类型语言用作动态语言,那么我们就是在与范式作斗争,并且在我们继续对代码库进行更改时,没有任何东西可以指导/帮助我们。自由越大,责任越大(编译器)。不要成为编译器,我们的目的是使用编译器。参考TypeScript:请停止使用任何来源:https://github.com/Advanced-Frontend/Daily-Interview-Question