这两天在用 vue3+typescript 重构一个 vue2 项目,但是 props 的类型检查真的好弱...

2021-07-23 21:40:11 +08:00
 Smash

说是重构,基本上算是重写了.不过由于用了 tailwindcss,还好都只是写了些静态页面.

今天正准备开始写逻辑,最后这 typescript 的支持程度,我真的是写不下去了.

今天准备赶紧切换到 react.

无意引战!!!

无意引战!!!

无意引战!!!

只是我没搞懂为什么 vue3 对 typescript 的支持这么差...

例如下面的写法,关于 props 类型检查,这种写法我看着真的蛋疼.

export default defineComponent({
    props: {
        message: {
            type: Object as PropType<FlashInterface>,
            required: true
        }
    },
    setup(props) {
            // Stuff
        }
});

后来我又想了想,可能是因为.vue 模板的原因导致的,因为在<template>模板里面 this.$emit 都要被 vscode 红线报错.

所以,如果要愉快的使用 vue3,我觉得 vue3+js 可能才是最好的选择.

还有,我是业余前端,以上观点请轻喷.

4881 次点击
所在节点    程序员
43 条回复
anguiao
2021-07-24 02:47:33 +08:00
@Smash 3.2 会 release,快了
gouflv
2021-07-24 07:23:57 +08:00
vue3 还只是 vue,所以别指望太多
James369
2021-07-24 08:10:34 +08:00
那么结论是什么,vue 怎么和 ts 配合使用呢?
stkstkss
2021-07-24 09:11:42 +08:00
果然 vue 跟 ts 就是不搭 不管是 vue2 还是 vue3
chouchoui
2021-07-24 09:20:37 +08:00
记得还有个问题,如果 prop 对象的所有属性都是?: 在检查类型的时候这个 prop 的类型会变成 unknown

写了几年 vue+ts 已经对类型问题看淡了,vuex 的类型甚至不想说脏话
Oktfolio
2021-07-24 10:33:02 +08:00
我也是因为这种莫名其妙的写法放弃 Vue 的
hronro
2021-07-24 10:53:23 +08:00
ruoxie
2021-07-24 12:22:48 +08:00
不会啊,除了 slot 用起来有点不习惯,跟写 react + ts +hooks 差不多 https://github.com/lowcoding/lowcode-vscode/blob/master/webview-vue-webpack/src/views/snippet/List/index.tsx
Smash
2021-07-24 13:09:10 +08:00
@ruoxie 你这个例子没用到 props
suyingtao
2021-07-24 14:42:06 +08:00
用 script setup + defineProps + ts 开发体验还是不错的。composition API 比 hooks 好用很多,几乎没有心智负担,注意一下 ref / unref 就可以了,不像 hooks 要自己考虑好 deps 还要自己写 memo,有点像自动挡和手动挡的区别。

PS: script setup 在生产环境用的话,要更新 vue-loader 到 16.3.0 以上的版本,不然的话 build prod 模式会白页。
beginor
2021-07-24 15:12:23 +08:00
折腾来折腾去,最后还是 angular 最香
Smash
2021-07-24 16:14:47 +08:00
@beginor angular 每次创建组件都需要写一堆文件,我实在是受不了了,最开始就是尝试用 angular 重构的。速度太慢了。
no1xsyzy
2021-07-24 19:34:51 +08:00
vue3 正统是 svelte (
beginor
2021-07-24 20:13:43 +08:00
@Smash 可以在 angular.json 中设置 inlineTemplate inlineStyle 以及忽略 test, 这样一个组件一个文件
beginor
2021-07-24 20:15:35 +08:00
@Smash 那些文件也不用手写,都是用 ng 命令直接生成
LeeReamond
2021-07-25 06:21:06 +08:00
话说用 ts 的必要性是啥
gdtdpt
2021-07-25 09:57:00 +08:00
有个项目叫 direct-vuex,号称以 composition-api 和 ts 的方式使用 vuex,建议大家别用,坑多得根本填不完,写法也不优雅
bojue
2021-07-25 10:06:01 +08:00
@Smash #32 文件模本都是命令生成的,ng 也不慢,就是不知道服务端渲染支持度如何了
lastisee
2021-07-25 15:42:33 +08:00
楼主有 react 加 typescript 的写法规范教程这些吗,比如阿里的 Java 编程规范这种,我的 interface 和 type 完全凭心情,type 也到处都在定义,我现在感觉写得有点不伦不类。
sjhhjx0122
2021-07-26 08:56:18 +08:00
@gdtdpt 试试 pinia

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

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

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

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

© 2021 V2EX