文章目录
前言
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。