使用流程

1.首先要清除类库是什么类型,不同的类库有不同的使用方式

2.寻找声明文件

JS类库一般有三类:全局类库、模块类库、UMD库。例如,jQuery是一种UMD库,既可以通过全局方式来引用,也可以模块化引用。

声明文件

当我们要使用一个类库时,需要ts声明文件,对外暴露API,有时候声明文件在源码中,大部分是单独提供额外安装。比如jQuery需要额外安装类型声明包。

幸运的是,大部分的类库,TS社区都有声明文件。名称为@types/类库名,需要去这个网站搜一下http://microsoft.github.io/TypeSearch/

如果没有,需要自己去写一个,这也是为社区贡献的好机会。http://definitelytyped.org/guides/contributing.html这里提供了一些写声明文件的方法。在写ts声明文件的时候,暂时用不到的API可以可以不写。

下面我将演示,如何在ts文件中使用三种类库。首先准备三个js文件,分别表示全局类库、模块类库、UMD库。

// 全局类库  global-lib.js
function globalLib(options) {console.log(options);
}
globalLib.version = "1.0.0";
globalLib.doSomething = function () {console.log('globalLib do something');
};// 模块类库  module-lib.js
const version = "1.0.0";
function doSomething() {console.log('moduleLib do something');
}
function moduleLib(options) {console.log(options);
}
moduleLib.version = version;
moduleLib.doSomething = doSomething;
module.exports = moduleLib;// UMD库  umd-lib.js
(function (root, factory) {if(typeof define === "function" && define.amd){define(factory);}else if(typeof module === "object" && module.exports){module.exports = factory();}else{root.umdLib = factory();}
})(this, function () {return {version: "1.0.2",doSomething() {console.log('umdLib do something');}}
});

全局类库

  1. 在HTML文件<script>标签中引入该库
  2. 将写好的声明文件与js库放在同一文件夹下,命名相同,后缀名为.d.ts
  3. 此时可以在ts文件中使用全局API

如果此时编译器未报错,而浏览器报错not defined,可能是html中引入的路径是相对路径,改成绝对路径即可(以项目目录为根目录)。

声明文件global-lib.d.ts

declare function globalLib(options: globalLib.Options): void;
declare namespace globalLib{const version: string;function doSomething(): void;interface Options {[key: string]: any,}
}

在ts文件中使用该库:

globalLib({x:1});
globalLib.doSomething();

模块类库

  1. 将声明文件放在相同的目录下
  2. 在ts中引入

声明文件 module-lib.d.ts

declare function moduleLib(options: Options): void;
interface Options {[key: string]: any,
}
declare namespace moduleLib{const version: string;function doSomething(): void;
}
export = moduleLib; // 这样写兼容性更好

ts中使用类库

import moduleLib from './Libs/module-lib.js';
moduleLib.doSomething();

UMD类库

UMD库有两种使用方式:

  • 引入全局类库的方式
  • 模块类库引入的方式

其中,在使用全局类库的引入方式时,编译器会提示,不建议这样做,需要在tsconfig.json中打开allUmdGlobalAccess配置项可以消除提示。

声明文件 umd-lib.d.ts

declare namespace umdLib {const version: string;function doSomething(): void;
}
export as namespace umdLib // 专门为umd库准备的语句,不可缺少
export = umdLib

ts中使用UMD库(不再演示全局使用方式)

import umdLib from './Libs/umd-lib'
umdLib.doSomething();
console.log(umdLib.version);

例:在ts中使用jQuery(不演示全局引入方式)

先安装jquery及其声明文件

npm install -D jquery @types/jquery

使用:

import $ from 'jquery';
$(".app").css("color","red");

为类库添加插件

即为类库添加自定义的方法

其中UMD库和模块类库的添加插件方法一致。

// 为全局类库增添自定义方法
declare global {namespace globalLib {function myFunction(): void}
}
globalLib.myFunction = () =>{console.log("global插件")};// 为模块类库添加自定义方法
declare module "./Libs/module-lib.js"{export function myFunction(): void;
} // 为module-lib类库声明myFunction方法
moduleLib.myFunction = () => {console.log("module插件")}; // 定义自定义方法// 为UMD库添加自定义方法
declare module "./Libs/umd-lib.js"{export function myFunction(): void;
} // 为umd-lib类库声明myFunction方法
umdLib.myFunction = () => {console.log("umd插件")}; // 定义自定义方法globalLib.myFunction();
moduleLib.myFunction();
umdLib.myFunction();

例如,为类库moment增添自定义方法(jQuery不可以,需要使用官方提供的API)

npm install -D moment @types/momentimport m from 'moment';
declare module 'moment'{export function myFunction(): void;
}
m.myFunction = () => {console.log("moment插件")};m.myFunction();

转载于:https://www.cnblogs.com/V587Chinese/p/11519932.html

如何在TypeScript中使用JS类库相关推荐

  1. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  2. 如何在TypeScript中删除数组项?

    本文翻译自:How do I remove an array item in TypeScript? I have an array that I've created in TypeScript a ...

  3. typescript中函数_如何在TypeScript中合成Canvas动画

    typescript中函数 by Changhui Xu 徐昌辉 如何在TypeScript中合成Canvas动画 (How to Compose Canvas Animations in TypeS ...

  4. 如何在java中调用js方法

    [java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...

  5. 在html页面上引用脚本文件,如何在html中调用JS文件

    一.JavaScript脚本语言的特性 JavaScript脚本语言是一种面向浏览器的网页脚本编程语言.脚本语言有以下几个特性: 1.在客户端执行.完全在用户的计算机上运行,无须经过服务器. 2.面向 ...

  6. 如何在typescript中引入jquery

    引入jQuery之前的操作 在typescript中引入jQuery时首先要创建一个typescript项目(直接新建的typescript文件无法通过此方法引入) 一.创建typescript项目 ...

  7. 如何在html中调用JS文件

    转载自:微点阅读   https://www.weidianyuedu.com 一.Javascript脚本语言的特性<br>Javascript脚本语言是一种面向浏览器的网页脚本编程语言 ...

  8. 如何在typescript中移除数组中某一项

    typescript中的数组 默认只有push.pop这样的增删api. 如果想移除数组中间的某一项元素, 可以通过: let node: int;  //要移除的对象 nodes: int[]; t ...

  9. 在typescript中导入第三方类库import报错

    问题 最近开始折腾typescript,在使用第三方类库,比如最常见的lodash,采用常规方法导入 import * as _ from 'lodash' vscode中报错提示lodash不是mo ...

最新文章

  1. vue 数组赋值_如何给Vue的data中的数组赋值?
  2. 【推荐系统】手写ItemCF/UserCF代码,你会吗?
  3. Linux下,安装配置Weblogic
  4. 六十六,完成SpringBoot项目中的员工增删查改功能
  5. 知道创宇杨冀龙:2B产品经理的自我修养
  6. Redis(数据类型及操作指令、Java连接Redis)
  7. 安卓版有道词典的离线词库-《21世纪大英汉词典》等_我是亲民_新浪博客
  8. 弱监督学习和小目标检测
  9. 什么是视频结构化?视频结构化有什么作用
  10. Confusing conditions about MySQL script
  11. 是时候拥抱ViewBinding了~
  12. 谷歌地图时代结束,怎么看高清卫星影像地图?
  13. 对比PAYPAL和国际信用卡支付的流程
  14. python自学笔记+一个汇率计算PyQt实例
  15. c语言深度剖析(2)—有符号与无符号
  16. linux tf2 中文,tf2+cnn+中文文本分类优化系列(2)
  17. TCP/IP协议族 总结
  18. 计算机二级办公软件的函数,《计算机二级办公软件常用excel函数》.doc
  19. 计算机病毒的自述,电脑的自述作文500字
  20. FT232RL为接口转换芯片

热门文章

  1. java jsp公共异常页面_实际应用中JSP页面的异常处理
  2. [蓝桥杯][2018年第九届真题]整理玩具(树状数组)
  3. python统计分析--3.线性回归四种算法
  4. php图片显示框,【转】php让图片弹出下载框的方法
  5. java 事务的提出者_java中什么是事务
  6. 深度学习(19)神经网络与全连接层二: 测试(张量)实战
  7. aix服务器屏幕显示被锁住了,AIX恢复密码过程总结
  8. 『ACM-算法-ST算法』信息竞赛进阶指南--区间最值问题的ST算法
  9. 2019年 ICPC亚洲区预赛(上海赛区)总结
  10. no java virtual machine was found after searching Failed to load the JNI shared library