一、问题

在实际开发项目中就遇到了这样的问题,需要在Vue+Typescript项目中添加复制文本的功能,就找了clipboard插件,先是新建了一个新的项目用来实验看看是否好用,都写好了以后发给别人让在项目里添加,结果采用常规的方法导入第一句话就提示错误。然后又用了vue-clipboard2插件导入 import VueClipboard form'vue-clipboard2'同样报一样问题,刚开始一直没意识到是typescript的原因。报错如下:

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';

二、错误原因

因为第三方类库并没有ts的.d.ts 类型的声明文件,所以无法在目前的项目中正常使用。举个栗子,我们使用vant,首先是在项目里安装,然后再项目里引入。

npm i vant -S  //在项目里安装
import { Toast } from 'vant'; //引入项目

会发现这里并没有报错,我们查看node_modules,找到vant文件,发现里面有types文件夹,types文件夹里面有index.d.ts等文件,这个文件夹的用处就在于将弱类型转换为强类型,对插件里面的变量方法什么的进行了声明和定义。所以可以在typescript项目里正常使用。

而我不管是安装vue-clipboard2还是clipboard,在文件里都未发现types文件夹及index.d.ts等文件,所以项目不支持使用。

查阅网上资料,可以自定定义(.d.ts)来描述库的类型和@types两种声明方式,第一次我模仿官网上jquery来写.d.ts(如下图:)不过没成功,就想着那就试试@types。

三、解决方法

查阅相关资料后在,做了下面的尝试。

npm install @types/vue-clipboard2

即vue-clipboard2安装的前提下再增加安装@types的npm modules即可,然后就尝试了一下,依旧报错(如下):

D:\Work\wechat>npm install @types/vue-clipboard2
npm ERR! code E404
npm ERR! 404 Not Found: @types/vue-clipboard2@latest
npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\ever\AppData\Roaming\npm-cache\_logs\2019-06-17T03_21_01_988Z-debug.log

这个原因是并没有vue-clipboard2的types声明文件,所以在使用之前还是需要在typesearch里面查看一下相关的类库是否有声明文件,https://microsoft.github.io/TypeSearch/   查询结果如下:

所以就采用了clipboard

通过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('复制失败,请手动选择复制!');
});
}

在typescript中import第三方类库clipboard报错的更多相关文章

  1. eclipse 中 import sun.misc.BASE64Decoder; 报错

    from://http://blog.sina.com.cn/s/blog_48964b120101ahrf.html 在android做3DES加密功能时 eclipse 中 import sun. ...

  2. 在ios中使用第三方类库

    在项目开发中经常会用到一些第三方类库,通常有两种方法来做到:一种方法是直接把所有的.h和.m文件复制到项目中:另一种方法是把.xcodeproj拖到项目中生成静态链接库并引用. 方法一:直接复制所有源 ...

  3. Laravel Controller中引入第三方类库

    Laravel 引入第三方类库 在Controller中引入自定义的php文件,先在app目录下创建一个新的文件夹,命名Tools(可自定义),接着创建一个MyTest.php: <?php c ...

  4. python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?

    python中引入包的时候报错:import unittestimport smtplibimport timeimport osimport sysimp.reload(sys)sys.setdef ...

  5. android 程序中res/values-v14/styles.xml报错的解决办法

    从旧的ADT迁移的新的ADT时, android 程序中res/values-v14/styles.xml报错: error: Error retrieving parent for item: No ...

  6. MySQL中遇到的几种报错及其解决方法

    MySQL中遇到的几种报错及其解决方法 1.[Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...

  7. (转)android import library switch语句报错case expressions must be constant expressions

    今天当我从github上下载一个工程,并把它的库文件导入eclipse中,发现switch语句报错case expressions must be constant expressions : 解决方 ...

  8. Eclipse中导入项目后js报错解决方法(转未解决问题)

    本文转自:http://blog.csdn.net/chenchunlin526/article/details/54666882 Eclipse中导入项目后js报错的原因与解决方法 在我们将项目导入 ...

  9. 如何快速解决myeclipse中导入jquery文件的报错。

    如何快速解决myeclipse中导入jquery文件的报错. 解决: 选中错误的文件, 点击右键, 选中myeclipse,点击Exclude From Validation.

随机推荐

  1. Linux文件类型 扩展名的作用

    链接类型文件 查找显示管道文件 普通文件类型 file 查看文件的类型 data文件类型 创建块字和符设备 mknod 1,.tar .tar.gz .tgz .zip tar.bz 表示压缩文件,创 ...

  2. dp专练

    dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...

  3. Intellij idea 出现错误 error:java: 无效的源发行版: 8解决方法

    这是由于jdk的版本与项目的要求不一致造成的,如果是maven项目,首先查看一下pom.xml,以我的项目为例: <build> <plugins> <plugin> ...

  4. 史上最全的MSSQL笔记

    http://www.cnblogs.com/gameworld/archive/2015/09/08/4790881.html

  5. 南邮部分wp

    MYSQL 打开robots.txt 鍒お寮€蹇冿紝flag涓嶅湪杩欙紝杩欎釜鏂囦欢鐨勭敤閫斾綘鐪嬪畬浜嗭紵 鍦–TF姣旇禌涓紝杩欎釜鏂囦欢寰€寰€瀛樻斁鐫€鎻愮ず淇℃伅 这一看乱码,放到新建tx ...

  6. RESTful-rest_framework应用第二篇(get、post的序列化与反序列化)

    目的是: 利用rest_framework实现对数据库内容的查看get请求(序列化).提交保存数据post请求 (反序列化) rest_framework序列化组件(即查看和) 第一步:基于Djang ...

  7. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  8. iOS----------设计模式的六大设计原则------>开放-关闭原则(OCP,Open-Close Principle)

    定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...

  9. Newton 插值法

    定义 $f(x)$ 关于 $x_0, x_1, \dots, x_k$ 的 $k$ 阶均差(差商)记做 $ f [x_0, x_1, \dots, x_k] $,均差是递归定义的,有两种等价定义 \b ...

  10. [HEOI2016/TJOI2016][bzoj4554] 游戏 [建图+最大流]

    题面 传送门 思路 看到棋盘摆放和棋子冲突,再加上这么小的数据范围,你能想到什么? 网络流棋盘模型啊! 就是 把源点连到每一行,每一列连到汇点,再在中间...... 等等,这道题每行不一定全部冲突?? ...