在實際開發項目中就遇到了這樣的問題,須要在Vue+Typescript項目中添加複製文本的功能,就找了clipboard插件,先是新建了一個新的項目用來實驗看看是否好用,都寫好了之後發給別人讓在項目裏添加,結果採用常規的方法導入第一句話就提示錯誤。而後又用了vue-clipboard2插件導入 import VueClipboard form'vue-clipboard2'一樣報同樣問題,剛開始一直沒意識到是typescript的緣由。報錯以下:vue
TS7016: Could not find a declaration file for module 'vue-clipboard2'. 'D:/Work/wechat/node_modules/vue-clipboard2/vue-clipboard.js' implicitly has an 'any' type. Try `npm install @types/vue-clipboard2` if it exists or add a new declaration (.d.ts) file containing `declare module 'vue-clipboard2';node
由於第三方類庫並無ts的.d.ts 類型的聲明文件,因此沒法在目前的項目中正常使用。舉個栗子,咱們使用vant,首先是在項目裏安裝,而後再項目裏引入。jquery
npm i vant -S //在項目裏安裝 import { Toast } from 'vant'; //引入項目
會發現這裏並無報錯,咱們查看node_modules,找到vant文件,發現裏面有types文件夾,types文件夾裏面有index.d.ts等文件,這個文件夾的用處就在於將弱類型轉換爲強類型,對插件裏面的變量方法什麼的進行了聲明和定義。因此能夠在typescript項目里正常使用。git
而我無論是安裝vue-clipboard2仍是clipboard,在文件裏都未發現types文件夾及index.d.ts等文件,因此項目不支持使用。github
查閱網上資料,能夠自定定義(.d.ts)來描述庫的類型和@types兩種聲明方式,第一次我模仿官網上jquery來寫.d.ts(以下圖:)不過沒成功,就想着那就試試@types。vue-cli
查閱相關資料後在,作了下面的嘗試。typescript
npm install @types/vue-clipboard2
即vue-clipboard2安裝的前提下再增長安裝@types的npm modules便可,而後就嘗試了一下,依舊報錯(以下):npm
這個緣由是並無vue-clipboard2的types聲明文件,因此在使用以前仍是須要在typesearch裏面查看一下相關的類庫是否有聲明文件,https://microsoft.github.io/TypeSearch/ 查詢結果以下:this
因此就採用了clipboardspa
經過npm執行安裝@types/clipboard插件,安裝完成後就能夠在項目中正常的使用clipboard了。
在項目裏安裝
npm install --save @types/clipboard
在項目中引入
import clipboard from 'clipboard'; //註冊到vue原型上(這裏不是很明白,還沒搞清楚) Vue.prototype.clipboard = clipboard;
<h1 class="coupon-code" id="bar">{{couponCode}}</h1> <button class="btn" data-clipboard-action="copy" data-clipboard-target="#bar" @click="copyLink">點擊複製</button>
咱們須要定義data-clipboard-action
屬性,來選擇是複製仍是剪切,若是忽略這個,默認是copy
public copyLink() { const This = this; const clipboard = new Vue.prototype.clipboard('.btn'); clipboard.on('success', () => { // Toast('複製成功'); This.$toast('複製成功'); }); clipboard.on('error', () => { Toast('複製失敗,請手動選擇複製!'); }); }