有哪些开源的应用了 typescript 的前端示例项目么

2023-06-26 17:22:30 +08:00
 muyiluop

主要想看看怎么用的,我看了几个 vue3+ts 的后台管理的代码,发现为啥都定义 interface。 纯粹的数据展示,我能理解定义成interface,像表单参数我想的应该是定义成 class吧,这样表单校验直接在对应的class里实现了,比如登录请求的参数,定一个LoginParam,密码的明文转密文方法、参数去除空格、类型转换、参数校验啥的这些相关的写在这个类里,然后封装个什么工具,适配 UI 的校验规则,页面上绑定这个对象。

我对前端不太熟悉,只会套别人写好的,有样学样,复制粘贴。希望大家多指教指教,感谢。

2995 次点击
所在节点    程序员
27 条回复
july1995
2023-06-26 18:12:52 +08:00
同蹲一个高质量项目参考学习一下
gowk
2023-06-26 18:26:36 +08:00
ruoxie
2023-06-26 18:28:33 +08:00
interface 和 class 不是同一类型的东西,编译后 class 依然存在,interface 就没有了。你想问的应该是为什么不用 class 去封装逻辑,也就是面对对象,而是函数式。然后跟 ts 没有什么关系了
ruoxie
2023-06-26 18:31:24 +08:00
@gowk 接口返回类型没有,下一个
shakukansp
2023-06-26 18:31:34 +08:00
建议看看 vuelidate
不是很懂表单验证为什么要 class
Belmode
2023-06-26 18:36:13 +08:00
哈哈哈,Angular
thinkershare
2023-06-26 18:46:44 +08:00
因为大家使用 TypeScript 在乎的是 Type 而不是 Class, 或者说大家只是喜欢使用带有文档的脚本语言, Web APIs 就是典型的 class 风格, 而大部分 JavaScript 是走到函数式风格,然后使用组合来实现复用. 核心还是前端暂时还不需要后端那样重度的封装.
JohnH
2023-06-26 18:56:55 +08:00
https://github.com/HalseySpicy/Geeker-Admin

对比了一些星数更高的框架,个人比较喜欢这个风格。
nulIptr
2023-06-26 21:26:47 +08:00
因为 typescript 不等于面向对象
agdhole
2023-06-26 21:40:50 +08:00
用 angular 吧,真正的 0 心智负担的框架。
harrozze
2023-06-26 22:22:16 +08:00
想了半天,我觉得还是琢磨一下怎么用 C 去实现面向对象编程,或者面向接口( interface )编程,这个问题就不再是个问题了。
orzorzorzorz
2023-06-26 23:11:34 +08:00
https://github.com/ant-design/ant-design
虽然政治不正确,但我确实觉得这个用得还行,至少中规中矩,适合初学。
Pastsong
2023-06-26 23:21:09 +08:00
class 很重,JS 作为一个很灵活的语言没有必要背这些 OOP 的包袱,面向 interface 编程是 OOP 的高级用法。JS 的简单 Object 就已经能完成很多工作了

class LoginParam {
validate(): boolean
}

完全可以用更轻量的

interface LoginParam {}
validate(param: LoginParam): boolean

替代
amlee
2023-06-26 23:28:22 +08:00
interface 写的多的程序,风格估计更偏函数式。可能你做后端,代码风格更偏面向对象吧。
jiangzm
2023-06-27 02:45:54 +08:00
此 interface 非彼 interface

typescript 中的 interface 仅是区别于 Type 的类型定义,虽然大部分时候两者的使用可以互换,但还是有些许差异
class 是 es6 出的一个类型标识符,虽然 typescript 也有 class 写法实质还是 js 中的 class ,只不过对成员增加了一些修饰符

类型定义可以看作是 doc ,不影响执行逻辑结果
类型是值,class 前身就是 function
Quarter
2023-06-27 07:46:40 +08:00
定义 class 是一种面相对象的编写模式吧,但是写 interface 只是定义一下数据结构,和代码的本身逻辑是没有关系的,只是在使用和传递的时候更方便的知道这个数据的构成,换而言之,没有这个 interface 根本不影响代码运行,而 class 本身就是 es 语法,跟 ts 关系不大,属于写法的问题
NICE20991231
2023-06-27 07:48:57 +08:00
要找 model entity 这种用法吗,应该很少,基本就是写个类型...
感觉现在的项目,数据都是由组件提供的,很少会转换参数了,遇到了手动处理一下,也没必要用模型
nitmali
2023-06-27 08:24:45 +08:00
Angular +1
darkengine
2023-06-27 08:43:57 +08:00
遇到跟 OP 一样的困惑,在 web 项目里用 TS 也是一样 interface 一把梭。但是有些需求,例如某种数据,里面有时间戳
interface IEvent { timestamp: number },需要根据用户的配置输出格式化的时间字符串,如果用 class 来定义再加个 toString 之类的函数就很符合 OO 的做法。

当前我的做法是封装一个辅助函数去解决 toString: (event: IEvent) => string ,或者更通用的 toString: (timestamp: number) => string
ChefIsAwesome
2023-06-27 09:22:30 +08:00
https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-oop.html

简单讲,js 很灵活,你想什么风格都行。但是前端开发者用 js ,绝大部分不是走 oop 路线的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX