从前有匹马叫代码
心若没有栖息的地方,到哪里都是流浪

这两天开发了一个组件,开发好之后想着先本地npm link 用一用试试,然后在vue3 项目中link了过来,发现VSCODE没有属性提示,鉴于考虑到一个好的组件应该是提示友好的,于是给组件准备加上属性提示。

首先,我的组件包名叫 "xxx-xx"这种,然后我是提供了全局安装和仅导入组件的方式

import ErasableLayer from "./ErasableLayer.vue";
import { createApp } from 'vue';


export { ErasableLayer };
export default {
  install(app: ReturnType<typeof createApp>) {
    app.component("ErasableLayer", ErasableLayer);
  }
};

于是写类型文件的话,就要按照入口文件的内容来写

declare module "erasable-pkg" {
  import { App, DefineComponent } from "vue";


  export const ErasableLayer: DefineComponent<{
    layerColor?: string;
    renderLayer?: (ctx: CanvasRenderingContext2D, w: number, h: number) => void;
  }, {}, {
    done: () => void;
  }>;

  export default {
    install(app: App) {
      app.component("ErasableLayer", ErasableLayer);
    },
  };
}

首先定义一个module表示我这个模块,然后借用Vue的DefineComponent来生成我的组件的属性,和emit事件的类型,

然后导出一个vue.use安装插件的方法,最后需要在你的包的package.json中指定你的types,

 

{
  "name": "erasable-pkg",
  "version": "1.0.0",
  "description": "",
  "main": "./dist/index.js",

  "types": "./types/index.d.ts"
}

这样的话,在使用组件的时候就会有属性提示了,如图:

 

 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

经过我测试,发现VSCode是可以提示的,webstorm属性提示加载不出来。

posted on 2024-08-18 09:08  从前有匹马叫代码  阅读(16)  评论(0编辑  收藏  举报