這兩天開發了一個元件,開發好之後想著先本地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屬性提示載入不出來。