• 请不要在回答技术问题时复制粘贴 AI 生成的内容
muyiluop
V2EX  ›  程序员

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

  •  
  •   muyiluop · Jun 26, 2023 · 4727 views
    This topic created in 1226 days ago, the information mentioned may be changed or developed.

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

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

    Supplement 1  ·  Jun 27, 2023
    再次感谢大家的回复指教!
    27 replies  •  2023-08-11 11:55:35 +08:00
    july1995
    july1995
    Jun 26, 2023 via iPhone
    1
    同蹲一个高质量项目参考学习一下
    ruoxie
    ruoxie
    Jun 26, 2023❤️2
    3
    interface 和 class 不是同一类型的东西,编译后 class 依然存在,interface 就没有了。你想问的应该是为什么不用 class 去封装逻辑,也就是面对对象,而是函数式。然后跟 ts 没有什么关系了
    ruoxie
    ruoxie
    Jun 26, 2023
    4
    @gowk 接口返回类型没有,下一个
    shakukansp
    shakukansp
    Jun 26, 2023
    5
    建议看看 vuelidate
    不是很懂表单验证为什么要 class
    Belmode
    Belmode
    Jun 26, 2023❤️5
    6
    哈哈哈,Angular
    thinkershare
    thinkershare
    Jun 26, 2023❤️1
    7
    因为大家使用 TypeScript 在乎的是 Type 而不是 Class, 或者说大家只是喜欢使用带有文档的脚本语言, Web APIs 就是典型的 class 风格, 而大部分 JavaScript 是走到函数式风格,然后使用组合来实现复用. 核心还是前端暂时还不需要后端那样重度的封装.
    JohnH
    JohnH
    Jun 26, 2023
    8
    https://github.com/HalseySpicy/Geeker-Admin

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

    class LoginParam {
    validate(): boolean
    }

    完全可以用更轻量的

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

    替代
    amlee
    amlee
    Jun 26, 2023
    14
    interface 写的多的程序,风格估计更偏函数式。可能你做后端,代码风格更偏面向对象吧。
    jiangzm
    jiangzm
    Jun 27, 2023❤️1
    15
    此 interface 非彼 interface

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

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

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

    简单讲,js 很灵活,你想什么风格都行。但是前端开发者用 js ,绝大部分不是走 oop 路线的。
    nzbin
    nzbin
    Jun 27, 2023
    21
    既然提到表单了,那还是 Angular 吧,相关框架也有不少
    https://github.com/ng-matero/ng-matero
    hamsterbase
    hamsterbase
    Jun 27, 2023 via Android❤️1
    23
    你可以看看 vscode ,完全基于 oop 开发的。 把 ts 玩出花了

    https://github.com/hamsterbase/hamsterbase-highlighter

    或者看我的项目,把 vscode 的部分代码剥离,该造成了一个叫做 vscf 的框架。
    Leviathann
    Leviathann
    Jun 27, 2023
    24
    all you need is type
    agdhole
    agdhole
    Jun 27, 2023
    25
    @Pastsong 这可不是 oop 包袱,很标准的面向接口编程,c#里面可以 public interface ILoginParam {}
    moment082
    moment082
    Jun 27, 2023
    26
    可以看看我写的这个 https://github.com/xun082/react-cli
    panyang
    panyang
    Aug 11, 2023
    27
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5367 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 156ms · UTC 03:25 · PVG 11:25 · LAX 19:25 · JFK 22:25
    ♥ Do have faith in what you're doing.