typescript 如何跳过ts类型检查?

文章目录

前言

typescript 的使用,虽然让代码更加规范,利于维护,但也给开发带来很多麻烦。为了跳过很多ts的类型检查,大家也是费尽心思,下面就介绍一些常用的方式,但并不是每一个都推荐使用。

any类型

将声明的变量改为any类型,这样就可以不受ts的类型约束,想怎么使用就怎么使用。

ts 复制代码
let any1: any = 1
any1 = 'dx'
any1 = false

// 你也可以把any类型的数据赋值给其它变量都不会有问题
let name: string = 'dengxi'
name = any1

// 你也可以读取或者调用any类型的任意属性和方法
any1.change(); // 很明显代码运行后js会报错,any1现在是一个数组类型,并没有change方法可以被调用。但es不会检验出它的错误,因为any类型就相当于放弃了ts的规则校验

很多人最常用的解决ts判断类型的麻烦,就是使用any类型,但使用了any类型之后,就等同于放弃了ts,并不是特别推荐。

而且有的时候,你使用的数据类型并不是自己声明的,可能是别人已经构造好的数据,你不能把别人构造好的数据类型改为any类型吧。

条件判断进行使用

ts 复制代码
let name: unknown 
let age: number
// age = name // 这样ts肯定是不允许赋值的,不能把一个未知的类型赋值给number类型。

// 但我们可以优先判断一下,如果name是number再赋值
if(typeof name === 'number') {
	age = name
}

虽然举的例子很简单,但条件判断后再调用,也是常用的一种方式,尤其是调用某个方法前,先判单它是否是一个函数,这样js既不会报错,ts也不会报错。

ts 复制代码
let name: unknown 
if(typeof name === 'function') {
	name()
}

断言

ts 复制代码
let name: unknown
let age: number

// 通过断言的方式告诉ts name就是number类型,让ts不要检查name
age = name as number

// 另外一种断言的写法
age = <number>name

// 我们想调用 number的toFixed方法,保留一位小数
// name.toFixed(1) // 这种写法肯定会报错, unknown 类型,没有 toFixed方法
// 这种断言用小括号括起来再调用方法,就没啥问题了
(name as number).toFixed(1) 

展示了三种不同的断言写法。虽然写法不同,但都是通过断言来让ts对这个数据类型放水,不要检查,就当作它是一个xxx类型。

加注释跳过ts检查

单行忽略 通过给某一行代码,加上 备注@ts-ignore,让这一行代码不受类型检查。

ts 复制代码
// @ts-ignore
let a: string = 0

跳过对整个ts文件的检查

但必须将注释 @ts-nocheck 添加到该文件的首行才行

ts 复制代码
// @ts-nocheck

let a: string = 0
let b: number = 'dx'

b.change()

很明显,上面的代码在ts里面都有问题,但加了@ts-nocheck 以后整个ts文件都不会被ts类型检查约束。这可能会产生新的问题,比如b.change() 在执行时必定会报错。所以一般不推荐使用@ts-nocheck。

相关推荐
一粒黑子7 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
紫微AI7 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
IT枫斗者7 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
九转成圣8 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
Beginner x_u8 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
SmartRadio8 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython8 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫8 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch8 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI8 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn