全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2023-06-19_你可能没用好 typescript

您的位置:首页 >> 新闻 >> 行业资讯

你可能没用好 typescript 前言最近在社区看到很多类似 typescript 不适合写业务的言论,我觉得这些言论都是基于一些误解,用好 typescript 对业务代码的健壮性和可维护性是有很大帮助的,本文就来聊聊如何用好 typescript。 为什么你会觉得 typescript 不适合写业务我们就用后台业务最常见的 Form,Table 页面来聊聊,你为什么会觉得 typescript 不适合写业务 image.png首先,对于这个常见的页面,我们所有的查询操作都是基于列表的查询接口。而列表查询接口所有的参数,不管是 page, size 还是各种 filter 都会最终影响你表格数据的展示。 所以对于这类页面最常见的一个操作就是把这些参数都放到 你的 deps 中,我们只需要改变 deps 中的值,就会自动触发 useEffect 请求数据。当然,如果你使用了 swr react-query 这类请求库,deps 就应该换成 key。 下面我用 swr 一个常见的列表接口来举例。 importuseSWRfrom'swr'; //swr传了范型这里axios的输入输出可以不用写,但是为了方便理解以及照顾不用swr的朋友,我还是写了 //不用axios的朋友换成自己项目的请求就好了 constfetcher=([url,params]:[url:string,params:ListParams])={ returnreq_getListOutput,ListParams(url,params).then((res)=res.data); }; functionuseList(params:ListParams){ const{data,isLoading}=useSWRListOutput(['/api/list',params],fetcher); return{ data:data?.list, count:data?.count, isLoading, } 可以看到,相比 javascript ,需要额外做的工作其实就是定义参数类型 ListParams 和接口返回的类型 ListOutPut。(ListParams 也是我们需要定义的 state 的类型) 只要定义好了输入和输出的类型,typescript 就会帮你做好类型检查,并做好代码提示。这样你就不用担心参数传错了,或者接口返回的数据类型不对了, 也不用担心 data 为空的时候,出现以下常见的错误提示 Cannotreadpropertiesofundefined(reading'xxx') 很多人觉得 typescript 不适合写业务,我想是因为他们觉得定义类型,特别是一些复杂的类型是一件很麻烦的事情。 如果体验过 tRPC , 或者 graphql-codegen 的话,你就会发现,其实这些类型都是可以复用的。我们的后台一般都是用强类型语言编写的。他们在写接口的时候,其实已经定义好了这些类型,我们只需要把这些类型拿过来就好了。 但是我们大多数人的项目前后端都不是一个仓库,也不是 graphql , 那么我们怎么拿到这些类型呢? OpenAPIOpenAPI规范(以前称为Swagger规范)是一种机器可读的接口定义语言规范,用于描述,生成,使用和可视化Web服务。它以前是Swagger框架的一部分,在2016年成为一个独立的项目,由Linux基金会的一个开源协作项目OpenAPI Initiative监督。 如果你的项目遵循 OpenAPI 规范,后台会给你一个 swagger 文档。那么恭喜你,你可以直接用 swagger 生成的 typescript 类型。 如果你在 github 上用 openapi , codegen , swagger 之类的关键词搜索,你会发现有很多开源的工具可以帮你生成 typescript 类型。 甚至有很多项目会直接帮你生成接口,但是我觉得自动生成接口这种东西如果你自己用 node 写一个类似的工具会更加符合你的业务需求。我们需要的仅仅是开箱即用,生成类型 生成类型我就用我们项目中常用的 openapi-typescript 来举例,选择他的原因纯粹是因为够简单,你可以自由选择你要的工具。首先安装 //选择 5.4.1 版本,原因后面会说。使用 npm 的自行翻译一下 yarnadd-Dopenapi-typescript@5.4.1 然后在 package.json 中配置 //没有prettier的话,不要--c.prettierrc.js { "scripts":{ "codegen":"npxopenapi-typescript这里你填你swagger.json的地址--c.prettierrc.js--make-paths-enum--output./src/ApiInterface.ts", } } //这里的--make-paths-enum是为了生成路径的枚举 //最新版本去掉了这个功能,我觉得这个功能很实用,所以我选择了5.4.1版本 然后我们每次运行 yarn codegen 就可以生成 ApiInterface.ts 文件了。 以我们的一个真实项目为例子,首先我们来看生成的路径枚举 有了路径枚举我们就不需要自己写路径了,直接用枚举就好了,这样就不会出现路径写错的问题了。 hight.gif然后我们来看看生成的类型 可以看到我们主要想要的都是 components 下的 schemas 类型。像上个 gif 一样,我们可以定义一个类型 import{typecomponents}from'@/ApiInterface' exporttypeApiInterface=components['schemas'] 这样,我们就不再需要自己来手动定义输入输出的类型了,就可以愉快的回车到底了 code.gif总结这种方案虽然不如 tRPC 那样直接复用一个类型,后台只要更改类型,前端就会报错。但是 tRPC 迁移的成本是很高的,而且很多公司的后台都不是用 typescript 写的,但是很多公司都会遵循 OpenAPI 规范。 如果后台改了接口,只需要运行一下 yarn codegen,编辑器就会自动给你提示哪些地方需要修改,你就会觉得 typescript 写业务也是一件很愉快的事情了。 最后,希望本文能对你有所帮助,以上。 阅读原文

上一篇:2025-02-24_数字经济与实体经济、虚拟经济的关系辨析 下一篇:2025-08-23_「只参与,不参赛」奖牌数却仅次于宇树,这个幕后玩家如何做到的?

TAG标签:

19
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价