vue3的defineProps使用外部类型

历史问题

这不是 Ts 的问题,而是 Vue 宏 defineProps 局限性,

interface IProps {
  name: {
	  type: String,
	  default: "zhangsan"
  }
}

// IProps 只能在当前(vue)文件中定义,不支持从外部导入
const props = defineProps<IProps>()

问题解决

该问题在 vue3.3 及以上版本中已经被修复,也就是说 vue3.3 及以上版本中的宏函数中可以直接使用外部导入的类型。

不仅如此,类型 IProps 甚至可以定义在全局的 d.ts 文件中(这就可以使用 namespace 等 ts 类型定义的 这些高级语法特性了),不过需要做一些额外的配置才可以。

// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { globSync } from "glob";

export default defineConfig(({ command, mode }) => {
  return {
    plugins: [
      vue({
        script: {
          globalTypeFiles: [ // 配置这个
            ...globSync("**/*.d.ts", { ignore: "node_modules/**" }),
          ],
        },
      })
    ]
  };
});
posted @   丁少华  阅读(43)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示