美文网首页
angular中使用第三方库

angular中使用第三方库

作者: Liekkasz | 来源:发表于2021-04-22 13:23 被阅读0次

    一、TypeScript 模块机制

    javascript从es5之前都缺少一种模块机制,无法通过js引入文件,于是requirejs等等的加载器应运而生。这些加载器的使用也并不统一,产生了amd,commonjs,umd等等的规范,各有所长。直到es6的发布,js自身引入的模块机制,将会在以后逐渐被应用起来。

    Typescrit的模块机制与es6的模块基本类似。模块是指在其自身作用域里执行,而不是在全局作用域里;模块间是依靠 exportimport 建立关系。编译器在编译过程中,也是依赖这种关系来定位需要编译的文件。

    TypeScript 依然还是以 JavaScript 文件的形式发布类库,这会导致类型无法表述,需要配合声明文件对其进行类型描述;因此声明文件成了类库一个必不可少的组成部分。

    二、分类

    Angular 使用 TypeScript 语言开发,要想让一个类库被运用,最重要的是看有没有声明文件

    有声明文件

    要分清类库是否有声明文件 *.d.ts,可以从两个方面来确认这件事:

    1、类库自带

    从 Npm 安装一个依赖包后,可以直接检查其库的 package.json 是否包含 typings 节点,例如 moment

    "typings": "./moment.d.ts"
    
    

    2、TypeSearch检索

    TypeScript 提供了一个叫 TypeSearch 网站,可以直接输入关键词检查是否包含该类库的声明文件。

    例如 lodash 可以在列表中点击会跳转至 npm 网站,并且会看到这样的一个命令:

    npm install --save @types/lodash
    
    

    无声明文件

    这类情况还蛮常见,这种情况下只能自行编写声明文件。

    Angular Cli 创建的项目会包含一个 src/typings.d.ts 声明文件,它会自动包含在全局声明定义中,而把这些类库的声明信息写在这里面再好不过。

    一般而言自己很难对一个类库写一个完整的声明文件,这对于成本来说太不合算,因此往往都是只对部分全局对象做一个 any (表示忽略该静态类型检查)亦可,例如:

    // src/typings.d.ts
    declare var $: any; 
    declare var jQuery: any;
    

    三、如何使用?

    有声明文件

    对于有声明文件,无需额外做什么,只需在需要模块的地方使用 import 来导入即可,例如:

    import * as moment from 'moment';
    
    moment(); // 当前时间
    
    

    无声明文件

    重要来看无声明文件时怎么做,前面说到使用 any 来表示忽略静态类型检查,意味者无法享受声明文件带来的智能提示快感。

    // app.component.ts
    
    const g2 = new G2();
    g2. // 输入 `.` 后是不会有任何方法或属性
    

    除此之外 TypeScript 编译过程中也不会对 jquery 做任何类型检查,jquery 是否真的存在只能由自己把握。对于 Angular 而言,是需要额外在 .angular-cli.jsonscripts 节点上明确加载这些模块。

    // .angular-cli.json
    "scripts": [
        "../node_modules/jquery/dist/jquery.min.js"
    ]
    

    TypeScript 编译后依然还是 JavaScript 代码,假如不手动加载 jquery 相关 JavaScript 文件,自然在运行过程中会提供未找到 jquery 的错误。

    相关文章

      网友评论

          本文标题:angular中使用第三方库

          本文链接:https://www.haomeiwen.com/subject/dbvvtqtx.html