chst365's blog chst365's blog
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

chst365

DIV工程师
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 浏览器

  • webpack

  • TypeScript

    • 一、类型基础
    • 二、数据类型
    • 三、接口
    • 四、类
    • 五、类与接口的关系
    • 六、泛型
    • 七、类型检查机制
    • 八、高级类型
    • 九、ES6与CommonJS的模块系统
    • 十、使用命名空间
    • 十一、声明合并
    • 十二、如何编写声明文件?
      • 全局类库声明文件
      • 模块类库声明文件
      • umd类库声明文件
    • 十三、tsconfig配置
    • 十四、编译工具:从ts-loader到Bable
    • 十五、代码检查工具:从TSLint到ESLint
    • 十六、单元测试
    • 十七、TS在react中的使用
    • 什么是TypeScript?
  • 性能

  • 工程化

  • React

  • JavaScript

  • 编程题

  • React技术揭秘

  • 算法

  • 前端
  • TypeScript
chst365
2020-04-05
目录

十二、如何编写声明文件?

# 十二、如何编写声明文件?

类库一般分为三类:全局类库、模块类库、umd类库。 jquery是umd类库,即可以通过全局方式引用,通过webpack的插件实现,也可以通过模块化的方式来引用。

# 全局类库声明文件

declare function globalLib(options: globalLib.Options): void;

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

// declare关键字可以为一个外部变量提供类型声明
1
2
3
4
5
6
7
8
9
10
11

# 模块类库声明文件

declare function moduleLib(options: Options): void

interface Options {
    [key: string]: any
}

declare namespace moduleLib {
    const version:  string
    function doSomething(): void
}

export = moduleLib
1
2
3
4
5
6
7
8
9
10
11
12

# umd类库声明文件

declare namespace umdLib {
    const version: string
    function doSomething():void
}

export as namespace umdLib

export = umdLib
1
2
3
4
5
6
7
8

入口文件

import $ from 'jquery'
// 无法找到xxx声明文件,在ts中,使用非ts类库时,必须为这个类库编写一个声明文件,对外暴露它的API,有时,它的声明文件是包含在它的源码中,但有时是单独提供需要额外安装的
// 安装类声明包:@types/jquery
$('.app').css('color','red')

/* 
    我们在使用外部类库时,需要查询一下有没有声明文件:http://microsoft.github.io/TypeSearch
    http://definitelytyped.org/guides //如何贡献声明文件
*/
globalLib({x: 1})
globalLib.doSomething()

import moduleLib from './module-lib'

moduleLib.doSomething()

import umdLib from './umd-lib'
// 如果注释上面,开启allowUmdGlobalAccess配置则解决问题
umdLib.doSomething()

// 给外部模块增加自定义方法
import m from 'moment'
declare module 'moment' {
    export function myFunction(): void
}

m.myFunction = () => {}

declare global {
    namespace globalLib {
        function doAnything(): void
    }
}
// 这样会给全局命名空间造成污染,一般不建议这样做
globalLib.doSomething = () => {}

// 声明文件之间的依赖

    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#语言#TypeScript
上次更新: 2021/04/22, 00:08:06
十一、声明合并
十三、tsconfig配置

← 十一、声明合并 十三、tsconfig配置→

最近更新
01
面试官
03-27
02
this&指针&作用域&闭包
03-27
03
前端
03-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 chst365 | 豫ICP备17031889号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式