在 TypeScript 中怎样尽量少的使用 any?

最近在用ts写项目,但用着用着发现出现了大量的any。。比如用axios接收返回值的时候,我就会写(res:any)=>{}
问下大佬们写前端的时候,是不是还专门放了个文件夹写typeinterface?是每次导入文件还是直接用d.ts全局声明呢?
然后写node的时候,比如uuid类型的number,传入的参数必须是string,但是在entity中又是number类型,搞得我只好用any。。
最后,能看看各位的文件是咋分的吗?


回答:

当然先认真通读一遍官方文档和翻译后的中文文档(版本比较旧但是大多数知识点都有)

typescript 英文文档

typescript 中文文档(版本比较旧)

对整个类型系统有个比较全面体系的大致认识,然后尽量避免使用any,多用interface和type声明类型,联合类型,交叉类型,类型推论,typeof类型保护,instanceof类型保护,自定义的类型保护,可null类型,模块声明(.d.ts怎么给js的any类型对象声明类型),泛型(用来应对数据类型是动态可变的,比如网络请求返回的数据类型),

关于类型保护,ts能够自动收窄类型范围,instanceof、typeof、自定义的类型保护、赋值语句、===、if else语句(根据条件的布尔值真假收窄类型范围)都能触发类型保护从而收窄类型,下面的链接有很详细的文章解读

TypeScript 的类型收窄

function isString(x: any): x is string {

return typeof x === "string"

}

在一些js过于动态,ts没有办法的时候,如果你能确定运行时一定是能类型转换成功的(或者是内部可以用any),那么可以直接 as (unknown as) Gundam,函数返回具体类型就好。

如果是第三方库是js写的,而且没有提供ts类型声明文件,ts也不能完全自动推导类型,可以值尝试写全局/局部.d.ts文件自己手动添加类型声明。

.d.ts 可以根据需要写在源码src目录里,这样整个src都可以使用,根据情况分为env.d.ts,(库名称).d.ts,再根据需要增加文件,比如window.d.ts(需要额外给window添加属性,如果可能的话,新增属性写成可undefined的类型)。


回答:

可以使用泛型规范接口返回的数据,比如像这样

interface Student {

name: string

id: number

}

// 此时的info就可以是 ApiResponse<Student> 或者嫌麻烦,处理一下直接为 Student

const info = await request<ApiResponse<Student>>(options)

以上是 在 TypeScript 中怎样尽量少的使用 any? 的全部内容, 来源链接: utcz.com/p/932856.html

回到顶部