前端同学,你到现在还没用 typescript 原因是什么?

2021-07-28 10:36:16 +08:00
 Imindzzz

我认为使用 ts 是只有好处没有坏处的。因为实在没办法的时候也是可以降级到原生 js 的写法的,但是熟悉 ts 后那真是太爽了。

如果你有什么问题可以说出来,看大伙能不能给你一个完美的解决方案。

大家心平气和不要吵架。

11809 次点击
所在节点    TypeScript
124 条回复
murmur
2021-07-28 10:44:19 +08:00
学习成本也是坏处啊,我在前端群经常见到因为类型问题饱受折磨的,本来 js 都不是问题,既然这样那 anyscript 不挺好,都 any 了还要 ts 干嘛

不是每个人都在做登月工程,不是每个人都要和别人协作,不是每个人都要维护个 5 年 10 年大项目,没新大项目就不上呗

类型全写完的时间够写好几个模块了
Shook
2021-07-28 10:45:22 +08:00
换做 dart 的话我是很愿意的,因为写 dart 心智负担很低,null-safety 让我省了很多问题。
而且配合 api-generator + swagger,我根本不需要自己写 model 和 request 定义,拿到接口文档就生成,剩下的是愉快的 UI 构建时间。

web 的话,因为 vue 本身用 ts 体验就一般,我自己还是更乐意用 js 写。
Imindzzz
2021-07-28 10:55:56 +08:00
@murmur 这个可以理解,不过前端其实没多少要花精力去学的,学学 ts 没错的。

你在群里看到的情况,在其他语言的群也能看到同样的情况,毕竟总会有初学者的。多问一些问题,熟练了就好了。

然后项目引入 ts 也是没啥坏处的,哪怕你是只写一个函数,能暴露出一个参数类型 /返回值类型不也挺好的嘛。
关键是引入 ts 你没有任何成本,免费获得 ts 的代码提示。

你调用每一个浏览器内置函数,都能享受到 ts 定义带来的便捷。所以加入 ts 吧!
Imindzzz
2021-07-28 10:59:09 +08:00
@murmur "类型全写完的时间够写好几个模块了"

这个我不太认可,这个不是随手就定义了吗,定义类型也算是先规划好再动手写实现吧。

你可不可以举一个“类型要写很久”的例子?
dqzcwxb
2021-07-28 11:00:39 +08:00
murmur
2021-07-28 11:01:47 +08:00
@xd199153 就是那种跟后端很复杂的交互,你需要啥取啥,少啥加啥,尤其是层嵌套次深的时候定义完整个东西跟写一堆 java 一样爽

问题是这种接口就封装这么一次,封装完可能都不去碰他

先规划好再实现,这就是最大问题,赶工情况下是不可能做到的,都是开发一半发现缺参数,然后东加一个西加一个

ts 配正规的软件工程不错
otakustay
2021-07-28 11:01:49 +08:00
@xd199153 写类型要很长时间就属于对 TS 的一个很大的误解,都不知道怎么传出来的
erlking
2021-07-28 11:04:46 +08:00
增加新人上手难度,降低自己在公司的可替代性。
vindurriel
2021-07-28 11:04:51 +08:00
@xd199153 有没有试过老项目改 ts 很多耍小聪明的地方想加类型约束特别烧脑
adjusted
2021-07-28 11:06:34 +08:00
typescript 文件多了确实慢
hahasong
2021-07-28 11:11:58 +08:00
写 ts 的同学,现在还没转 java 后端的原因是什么,都强类型了还写什么前端, java 不爽吗
Imindzzz
2021-07-28 11:16:49 +08:00
@murmur 哈哈哈,你这个场景我经常遇到,我的解决方法可能不太优雅。
就是直接从 chorme 的 xhr 里面复制返回值 json,直接贴到定义里。
```ts
export interface DoctorInfoInquiry {
amount: 1; // 执行价格
createTime: '2020-06-09 11:22:45';
deptId: '015';
deptName: '五官科'; // 其它这些,不用管它。反正只需要他的代码提示就行了。
doctorId: '2144';
doctorName: null;
hisDoctorId: '2218-2144';
hisId: 2218;
hisName: string;
id: 1531129221808;
isFull: '0' | '1'; // 满员
isOnDuty: '0' | '1'; // 下线
maxInquiry: 50;
price: number; // 这种字段需要参与计算,就认真定义下
remune: number; // 展示价格
type: '1' | '2' | '3' | '4'; // 这种也是,当然最好定义一个枚举
updateTime: '2020-06-09 11:22:45';
}
```
Imindzzz
2021-07-28 11:19:36 +08:00
@hahasong

同学,不要带带情绪反问哈,https://www.v2ex.com/help/assertive

认真回答你就是,我是前端。
h1104350235
2021-07-28 11:20:29 +08:00
任职过几家公司,都没有使用。
lemonnTr
2021-07-28 11:25:40 +08:00
没机会,团队技术栈是 vue 2.x 。
murmur
2021-07-28 11:26:43 +08:00
@xd199153 这是个很好的问题,万物基于 js,真的有用么,到头来还不是被 native app 吊锤

微信桌面端基于 h5 开发(当然核心都是 dll 写的),但是不支持 linux,易用性比 native 的 qq 差了一万个米聊都不止,甚至某些基础功能都没有

如果是狭义的前端,就是指浏览器页面,复杂的逻辑意味着复杂的操作,用户体验也不会好,单纯的页面堆砌不等于复杂,一个办公系统可能几十个模块,但是他复杂么,复杂的东西都是流程引擎实现的

所以归根结底,前端是在抢别人的饭碗,为了 js 而 js,还是真的有那么复杂的东西要做?
Imindzzz
2021-07-28 11:27:55 +08:00
@vindurriel 这个确实,我们目前的解决方案是不管老代码。新功能用 ts 写,老代码渐进式的重写。

这个就是我开头说到的“是在没法还可以降级到原生 js”,
一个 ts 项目是可以直接编译 js 页面的,甚至用 ts 写的工具函数也可以在 js 写的页面里用
murmur
2021-07-28 11:30:52 +08:00
所以我可以猜测说 ts 爽翻的是不是把 node 当 java 用,直接去干后端了

那不好意思,我支持 java,信仰不能丢
willygeek007
2021-07-28 11:32:28 +08:00
开源项目或者多人协作用 ts 会好一点, 小项目 js 爽一点
Imindzzz
2021-07-28 11:40:28 +08:00
@murmur 刚毕业我确实写过两年 java,现在怎么也是算个“资深前端”吧。
我个观点是,你引入 ts 是一点坏处都没有。哪怕你就写个 demo 项目,也应该用 ts 。

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

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

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

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

© 2021 V2EX