如何绕过typescript的类型检查?

前言:

随着越来越多的前端项目采用 typescript 来开发,越来越多前端开发者会接触、使用这门语言。它是前端项目工程化的一个重要帮手,结合 vscode 编辑器,给予了前端开发者更严谨、高效的编码体验。但同时,严格的类型检查也会使部分开发者的编码效率有所降低,将时间花费在解决类型冲突、类型不匹配上,从而导致望而却步,迟迟不敢上手。

本文描述了几种绕过 typescript 类型检查的方法,帮助ts开发者在遇上第三方库类型声明有误、上线时间紧张却还被ts类型耽搁开发进度、以及其他奇奇怪怪ts类型声明的场景时,能够快速摆脱ts类型检测,保障项目尽快上线。

注意,本文所提到的方法,只能作为一种最后不得已的hack手段,其目的是为了尽快完成需求而非代码取巧,读者不应该将其当成一种常用的写法并在项目内任意使用!

场景设定:

假设存在一个第三方库,允许开发者通过 json 定义一个表单,其 typescript 类型定义如下:

interface FormItem{
    /** 表单类型 */
    type:string
    
    /** 显示文本 */
    label:string
}

interface FormSelectItem extends FormItem{  
    /** 将表单类型指定为'select' */
    type:'select'
    
    /** 新增一个options属性,类型为数组,此类型定义存在错误,没有定义options数组里面的内容 */
    options:[]
}

type FormRule = (FormSelectItem|FormItem)[]
 

代码里,FormSelectItem.options期望的是一个有内容的数组,但因为第三方库给定的类型文件编写错误,没有给出数组内部项的结构,只留下[]空数组类型定义,导致开发者给FormSelectItem.options赋予一个有内容的数组都会导致 typescript 报错。

解决方法:

//@ts-ignore会让typescript编译器跳过注释下一行代码,不对其进行类型检查。通过不检查类型的方式,绕过类型检查

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeScript中,断言是一种告诉编译器某个值的类型的方法。使用断言可以绕过编译器对类型检查,但滥用断言可能会导致运行时错误。有几种断言的方式可以在TypeScript中使用。 第一种是使用as关键字进行类型断言。例如,将一个联合类型断言为其中一个类型,可以使用`(animal as Fish).swim`来访问Fish类型的属性或方法。但需要注意的是,类型断言只能骗过TypeScript编译器,而不是真正改变值的类型。 第二种是使用双重断言。这种方式可以先将值断言为任意类型(any),然后再将其断言为目标类型。这种方式可以解决编译器报错的问题,但同样需要谨慎使用。 在TypeScript 2.0中,还引入了非空断言操作符(!)。这个操作符可以用来断言一个值不为null或undefined,并将其指定为目标类型。例如,使用`let sname: string = name!;`来断言name值不为空。 总之,在使用断言时需要小心谨慎,并确保不会引起运行时错误。避免滥用断言是保证类型安全的重要一环。123 #### 引用[.reference_title] - *1* [【TypeScript】断言](https://blog.csdn.net/qq_30082553/article/details/129925047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [Typescript 类型断言](https://blog.csdn.net/z591102/article/details/120011068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [typescript 中的 断言](https://blog.csdn.net/qq_44408319/article/details/130984923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值