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。

相关推荐
阳光_你好2 小时前
简单介绍C++中线性代数运算库Eigen
开发语言·c++·线性代数
风逸hhh6 小时前
python打卡day29@浙大疏锦行
开发语言·前端·python
ᖰ・◡・ᖳ6 小时前
JavaScript:PC端特效--缓动动画
开发语言·前端·javascript·css·学习·html5
hy____1236 小时前
C++多态的详细讲解
开发语言·c++
小葡萄20256 小时前
黑马程序员C++2024版笔记 第0章 C++入门
开发语言·c++·笔记
万物此臻6 小时前
C#编写软件添加菜单栏
开发语言·c#
RongSen337 小时前
Python海龟绘图(Turtle Graphics)核心函数和关键要点
开发语言·python
小贾要学习7 小时前
【C语言】贪吃蛇小游戏
c语言·开发语言·游戏
程序员爱钓鱼7 小时前
defer关键字:延迟调用机制-《Go语言实战指南》
开发语言·后端·golang
免檒7 小时前
Go内存管理
开发语言·网络·golang·操作系统