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。

相关推荐
木子七13 分钟前
Js Dom
前端·javascript
Aliano21718 分钟前
Java的jackson库
java·开发语言
重生之我是菜鸡程序员20 分钟前
uniapp 使用vue/pwa
javascript·vue.js·uni-app
车载testing22 分钟前
使用Python和Vosk库实现语音识别
开发语言·python·语音识别
折枝寄北30 分钟前
C语言进阶:二.数据的存储(2)
c语言·开发语言·学习
ac-er888837 分钟前
PHP的四大安全策略
开发语言·安全·php
羊小猪~~1 小时前
数学建模(基于Python实现)--灰色关联分析法讲解,含案例
开发语言·python·数学建模
GIS程序媛—椰子1 小时前
【Vue 全家桶】2、Vue 组件化编程
前端·javascript·vue.js
yqcoder1 小时前
electron 中 ipcRenderer 的常用方法有哪些?
前端·javascript·electron
T0uken1 小时前
【Python】Bottle:轻量Web框架
开发语言·前端·python