基于vue-tsx的props实体补充插件

基于vue-tsx的props实体补充插件

这一期给大家分享一个基于vue-tsxprops实体补充插件,可以让我们在使用vue-tsx的时候,可以根据props的类型来补全props的实体。

为什么会开发这个插件

我个人是一个比较喜欢使用vue-tsx来进行开发的,但是在使用vue-tsx的时候,有一个比较痛苦的地方就是,当我们去迁移一些react的组件到vue中的时候,我们需要将react中的props通过手动的方式来实现其对应vueprops实体。这就造成我们的迁移成本会大大的增加。

所以我一直在寻找一个能平衡这个问题的插件,有段时间在翻找仓库的时候发现了一个unplugin-vue-tsx-auto-props的插件,他帮助我们实现了将类型转换成实体的插件。

但是当我使用这个插件的时候发现,这个插件只能引用当前文件中的props的类型,而且不支持继承、合并、交叉类型等等,最重要的是不支持单独定义一个类型文件,然后去引用这个类型文件的props类型。 所以我们在去迁移的时候使用这个插件给我们带来的成本也是很大的。所以我们最后决定基于这个插件进行二次开发,来解决这个问题。这就诞生了我们的vite-plugin-tsx-auto-props的插件。

安装

shell 复制代码
pnpm add vite-plugin-tsx-auto-props -D

配置

ts 复制代码
// vite.config.ts
import { defineConfig } from 'vite'
import { tsxAutoProps } from 'vite-plugin-tsx-auto-props'
import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig({
    plugins: [
        tsxAutoProps(),
        vueJsx(),
    ],
})

使用

你可以像unplugin-vue-tsx-auto-props插件一样使用它提供的功能。

tsx 复制代码
export interface Props {
    foo: string
    bar: number
}

export const Single = defineComponent<Props>(() => {
    return () => {
        return <div></div>
    }
})

类型props导入

ts 复制代码
// typing.ts
export interface Props {
    foo: string
    bar: number
}
tsx 复制代码
// index.tsx
import { Props } from './typing'

export const Single = defineComponent<Props>(() => {
    return () => {
        return <div></div>
    }
})

更多的例子

tsx 复制代码
import { defineComponent } from 'vue'
import type { Props } from './typing'

export interface Props1 {
  foo1: string
  bar1: number
}

export type Props2 = Props & Props1
export type Props3 = Pick<Props2, 'foo1' | 'foo'>

export const Single = defineComponent<Props>(() => {
  return () => {
    return <div></div>
  }
})

export const Single2 = defineComponent((_props: Props2) => {
  return () => {
    return <div></div>
  }
})

export const Single3 = defineComponent({
  setup(_props: Props3) {
    return () => {
      return <div></div>
    }
  },
})

这就是我们的插件所实现的功能,当然我们这个插件开发的比较仓库,可能会存在一些小问题,如果大家在使用的过程中发现了问题,可以在issue中提出来,我会尽快的去修复。

如果大家对我们的项目感兴趣,可以给我们的项目一个star,这样可以让更多的人看到我们的项目,也可以让我们的项目变得更好。

相关推荐
禅思院17 分钟前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】
前端·面试·架构
TrisighT44 分钟前
Electron 鸿蒙 PC 上点外链唤醒应用,我试了 6 种写法只有 1 种能跑
前端·electron·harmonyos
天才熊猫君2 小时前
配置与数据分离:一种可视化搭建的属性编辑方案
前端·javascript
林希_Rachel_傻希希2 小时前
web性能之相关路径——AI总结
前端·javascript·面试
竹林8182 小时前
用 wagmi v2 踩坑两天,我终于搞懂了多链钱包切换在 DeFi 前端中的正确姿势
前端·javascript
用户2136610035722 小时前
Vue项目搜索功能与面包屑导航
前端·javascript
星栈2 小时前
LiveView 的实时通信,爽是爽,但 PubSub 和广播也最容易把自己绕晕
前端·前端框架·elixir
用户2930750976692 小时前
告别关键词匹配,拥抱向量语义 —— RAG 搜索从零到一
前端
独孤留白2 小时前
从C到Rust:告别 C 的"指针 + 长度"手动模式
前端·rust
掘金安东尼3 小时前
中小厂前端候选人简历面试拆解:从 HR 面、技术面到主管面的双赢提问法
前端·面试