/ 前端
分类:前端来源:站内 最近更新:2022-11-21 13:58:49浏览:1390留言:0
这样的标题其实很容易被很多TS拥护者怼的,就好像VUE和React两大战线的拥护一样。我这里说的“好用”,其实已经承认TypeScript至少是“有用”的,至于好不好用只是我的个人的客观评价。而且TS是js的超集,听名字就挺高大上的,之所以学习并使用TS也是因为它确实最近很火,火到什么地步呢,你几乎在网络中找不到反对的声音,很多组件插件都推出了Ts版本或者兼容它,所以说TS必然是趋势,其实熟悉更多语言的开发者都会发现一个规律,js,java都开始慢慢的向C靠拢。但是我依旧认为没有想像的那么好用!
相信很多开发工作至少一半以上的开发项目都在敏捷中,不知道大家有没有发现,我们在解决TS问题的时间大于项目逻辑本身。
1、我们引用了一个第三方插件,之前我们习惯性的用什么去第三方查看api,用TS会很方便的在编辑器中有提示,很爽,但是我们要去找插件的TS的类型,因为我再项目里加了强校验。eg:
// js版本 import { createSlice } from "@reduxjs/toolkit"; // ………… export const systemSlice = createSlice({ name: "system", initialState, reducers: { setUserInfo: (state, action) => { state.userInfo = action.payload; } }, }); // TS版本 import { createSlice, PayloadAction } from "@reduxjs/toolkit"; export const systemSlice = createSlice({ name: "system", initialState, reducers: { setUserInfo: (state, action: PayloadAction<boolean>) => { state.userInfo = action.payload; }, }, });
如果再你没有引用是PayloadAction是报错的,起初我们用any解决问题,但是有代码洁癖,我有百度了一下插件本身是否已经提供了对应的类型。而这种情况一个新项目中新的插件会发生很多次,有的没有提供的插件,你不得不用 declare module "xxxx"来处理
2、一个文件中,JS100多行的代码,TS硬生生写了200多行,那多余的都是类型的编写,说冗余吧,其实不能算,就是让你阅读或者评审代码时很不爽,所以,我们习惯性的会把类型单独写一个文件。eg:
//先定义类型,如果很多时,会用单独文件定义 interface propsInterface { visible: boolean; onCancel: { (): void }; onOK: { (): void }; info: any; } // 函数组件本身 export default ({ visible, info, onCancel, onOK }: propsInterface) => { //…… }
3、前后端分离项目中,后端返回的数据格式,天知道他们会返回啥,这时候你不得不用any以防万一,但是个人是排斥TS中用过多的any的。eg:
axios.get("/admin/country-code").then((res: any) => { //…… });
4、项目中需求调整,接口调整家常便饭,但是你在TS中就会发现,你除了要修改需求逻辑之外,你还要调整类型,不管修改,删除,添加都是如此,都需要调整一下类型,当然编译时如果不强校验是不会错的,但是,看着编辑器爆红,一定很不爽吧。
5、在写深度类型的时候,简直就是痛苦,你必须要保证每一个层级的字段类型都定义对的。
6、TS虽然是js的超级,但是遇到这样的类型时,时不时校验爆红,eg:
// 通常一个对象中的某键值存在时就执行键值方法,js中会这么简写 a?.change() // TS中,感觉?.一直报错,你需要这样写 a&&a.change&&a.change()
等等问题,你在用TS写项目的时候,为了解决TS的问题会花费一定的时间,尤其在不熟悉的前提下。所以项目开发选型时,需要把TS列入考虑范畴。
推荐用TS
多人参与的项目,一部分人负责组件的构造,一部分人负责路由页的交互渲染。
项目交接频繁,尤其一些外包项目
项目本身就是造轮子的组件库,或者第三方插件强力建议用TS
不建议用TS
项目前端人员不多,基本一两个人维护项目
项目要求敏捷开发,项目本身也是试错阶段
TS本身也不是很熟悉,项目只是脚手架+UI组件的项目,不建议TS