如何在TypeScript中使用JS类库

使用流程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之 weka学习(六)最大内存

Weka 常见问题处理&#xff1a; weka如何安装支持向量机工具包 方法一、打开 weka&#xff0c;工具栏的Tools–>Package manager,可在里面添加需要的工具包。 方法二、下载 libsvm-**.jar 包&#xff0c;开源的。解压文件夹&#xff0c;里面……\libsvm-3.19\java ,下面有…

使用Jest进行单元测试

Jest是Facebook推出的一款单元测试工具。 安装 npm install --save-dev jest ts-jest types/jest 在package.json中添加脚本&#xff1a; “test”: "jest" 生成Jest配置文件&#xff08;生成jest.config.js&#xff09; npx ts-jest config:init 使用 先简单编写一个…

国外十大高校人工智能实验室及其代表性人物一览

本文转自&#xff1a; http://toutiao.com/a6293031494186107137/?tt_frommobile_qq&utm_campaignclient_share&appnews_article&utm_sourcemobile_qq&iid4325464459&utm_mediumtoutiao_android 高校建立的实验室与大公司有所不同&#xff0c;其研究项目…

pytorch简单框架

网络搭建&#xff1a; mynn.py: import torchfrom torch import nnclass mynn(nn.Module): def __init__(self): super(mynn, self).__init__() self.layer1 nn.Sequential( nn.Linear(3520, 4096), nn.BatchNorm1d(4096), nn.ReLU(True) …

java 基础安装和Tomcat8配置

初识 java&#xff0c;基础安装的说明。 下载 在oracle官网一般在同一个java版本会提供2个版本&#xff0c; 一个是Java SE Development Kit 7u80&#xff0c;此版本包含JDK开发环境版本&#xff1b; 另外一个是 Java SE Runtime Environment 7u80&#xff0c;此为只包含JR…

TypeScript React

环境搭建 我们当然可以先用脚手架搭建React项目&#xff0c;然后手动配置成支持TypeScript的环境&#xff0c;虽然比较麻烦&#xff0c;但可以让你更清楚整个过程。这里比较麻烦&#xff0c;就不演示了&#xff0c;直接用命令配置好。 npx create-react-app appname --typescri…

matlab内存溢出的解决方案

&#xff08;1&#xff09; 增加虚拟内存&#xff1a;cmd -> taskmgr 打开任务管理器&#xff0c;查看物理内存和虚拟内存&#xff0c;可观察matlab在运行过程中是否超过物理内存和虚拟内存。若超过&#xff0c;增加虚拟内存的方法是不可行的。物理内存不足的时候可以通过将…

c++MMMMM:oo

1.union&#xff0c;struct和class的区别 转载于:https://www.cnblogs.com/invisible2/p/11524465.html

matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded

matlab调用Java程序时出现 java.lang.OutOfMemoryError: GC overhead limit exceeded JDK1.6.0_37和JDK_1.7.0_60版本&#xff0c;这2个版本中JVM默认启动的时候-XX:UseGCOverheadLimit&#xff0c;即启用了该特性。这其实是JVM的一种推断&#xff0c;如果垃圾回收耗费了98%的…

[FY20 创新人才班 ASE] 第 1 次作业成绩

作业概况 条目备注作业链接【ASE高级软件工程】热身作业&#xff01;提交人数19未完成人数2满分10分作业情况总结 本次作业作为大家软工课程的第一次作业&#xff0c;完成度相当不错&#xff08;尤其是在国外暑研/赶论文的同学也在尽力完成作业&#xff0c;很感动&#xff09;。…

JVM 参数设置

1、集成开发环境下启动并使用JVM&#xff0c;如eclipse需要修改根目录文件eclipse.ini&#xff1b; 2、Windows服务器下安装版Tomcat&#xff0c;可使用Tomcat8w.exe工具&#xff08;tomcat目录下&#xff09;和直接修改注册表两种方式修改Jvm参数&#xff1b; 3、Windows服务…

从筛选简历和面试流程讲起,再给培训班出身的程序员一些建议

本人最近几年一直在外企和互联网公司承担Java技术面试官的职责&#xff0c;大多面试的是Java初级和高级开发&#xff0c;其中有不少是培训班出身的候选人。 在我之前的博文里&#xff0c;从面试官的角度聊聊培训班对程序员的帮助&#xff0c;同时给培训班出身的程序员一些建议&…

马普所机器学习课程 CMU701

马普所机器学习课程 Max-Planck-Institut fr Informatik: Machine Learning https://www.mpi-inf.mpg.de/departments/computer-vision-and-multimodal-computing/teaching/courses/ 马普所 GVV project http://gvv.mpi-inf.mpg.de/GVV_Projects.html CMU701 Tom Mitchel…

Random Forest 实用经验(转)

总结两条关于random forest的实用经验。给定数据和问题&#xff0c;对于算法选择有参考价值。 小样本劣势&#xff0c;大样本优势 小样本情况下&#xff08;1k~100k&#xff09;&#xff1a; RF相对与经典算法&#xff08;SVM or Boosting&#xff09;没优势&#xff0c;一般…

pytorch 查看中间变量的梯度

pytorch 为了节省显存&#xff0c;在反向传播的过程中只针对计算图中的叶子结点(leaf variable)保留了梯度值(gradient)。但对于开发者来说&#xff0c;有时我们希望探测某些中间变量(intermediate variable) 的梯度来验证我们的实现是否有误&#xff0c;这个过程就需要用到 te…

hbase数据迁移到hive中

描述&#xff1a; 原先数据是存储在hbase中的&#xff0c;但是直接查询hbase速度慢&#xff08;hbase是宽表结构&#xff09;&#xff0c;所以想把数据迁移到hive中&#xff1b; 1.先hbase 和 hive创建 外部表链接&#xff0c; 可以在hive直接查询&#xff1b; 2.利用创建的外部…

weka 学习总结(持续)

机器学习之 Weka学习&#xff08;一&#xff09;weka介绍&#xff0c;安装和配置环境变量 机器学习之 Weka学习&#xff08;二&#xff09;算法说明 Weka数据挖掘处理流程介绍 机器学习之 weka学习&#xff08;五&#xff09;示例用法 Weka数据处理结果分析 http://blog.c…

作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?...

我最近几年一直在做技术面试官&#xff0c;除了面试有一定工作经验的社会人员外&#xff0c;有时还会面试在校实习生和刚毕业的大学生。同时&#xff0c;我也在学校里做过兼职讲师&#xff0c;上些政府补贴课程&#xff08;这些课程有补贴&#xff0c;学生不用出钱&#xff09;…

memcpy函数的实现

1.按1个字节拷贝 &#xff08;1&#xff09;不要直接使用形参&#xff0c;要转换成char* &#xff08;2&#xff09;目标地址要实现保存 &#xff08;3&#xff09;要考虑源和目标内存重叠的情况 void * mymemcpy(void *dest, const void *src, size_t count) {if (dest NULL …

MATLAB中调用Weka设置方法(转)及示例

本文转自&#xff1a; http://blog.sina.com.cn/s/blog_890c6aa30101av9x.html MATLAB命令行下验证Java版本命令 version -java 配置MATLAB调用Java库 Finish Java codes.Create Java library file, i.e., .jar file.Put created .jar file to one of directories Matlab …