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。

相关推荐
kyriewen5 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
山河木马6 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
tangdou3690986558 小时前
AI真好玩系列-2分钟快速了解DeepAgents | Quick Guide to DeepAgents in 2 Minutes
前端·javascript·后端
张元清8 小时前
React useIntersectionObserver Hook:懒加载与可见性检测(2026)
javascript·react.js
彭于晏爱编程8 小时前
纯 JS + Node,一个下午手搓了能读懂公司代码的 AI 助手,老板以为我转行了
前端·javascript
妙码生花9 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十四):眨眼小人登录页制作
前端·javascript·ai编程
妙码生花9 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十三):前端路由初始化
前端·javascript·ai编程
PBitW9 小时前
GPT训练我的第四天,被打惨了!!!😭😭😭
前端·javascript·面试
DarkLONGLOVE9 小时前
快速上手 Pinia!Vue3 极简状态管理使用教程
javascript·vue.js
mackbob9 小时前
.eslintrc.js详细配置说明
javascript