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

全局类库声明文件

  1. declare function globalLib(options: globalLib.Options): void;
  2. declare namespace globalLib {
  3. const version: string;
  4. function doSomething(): void;
  5. interface Options {
  6. [key: string]: any
  7. }
  8. }
  9. // declare关键字可以为一个外部变量提供类型声明

模块类库声明文件

  1. declare function moduleLib(options: Options): void
  2. interface Options {
  3. [key: string]: any
  4. }
  5. declare namespace moduleLib {
  6. const version: string
  7. function doSomething(): void
  8. }
  9. export = moduleLib

umd类库声明文件

  1. declare namespace umdLib {
  2. const version: string
  3. function doSomething():void
  4. }
  5. export as namespace umdLib
  6. export = umdLib

入口文件

  1. import $ from 'jquery'
  2. // 无法找到xxx声明文件,在ts中,使用非ts类库时,必须为这个类库编写一个声明文件,对外暴露它的API,有时,它的声明文件是包含在它的源码中,但有时是单独提供需要额外安装的
  3. // 安装类声明包:@types/jquery
  4. $('.app').css('color','red')
  5. /*
  6. 我们在使用外部类库时,需要查询一下有没有声明文件:http://microsoft.github.io/TypeSearch
  7. http://definitelytyped.org/guides //如何贡献声明文件
  8. */
  9. globalLib({x: 1})
  10. globalLib.doSomething()
  11. import moduleLib from './module-lib'
  12. moduleLib.doSomething()
  13. import umdLib from './umd-lib'
  14. // 如果注释上面,开启allowUmdGlobalAccess配置则解决问题
  15. umdLib.doSomething()
  16. // 给外部模块增加自定义方法
  17. import m from 'moment'
  18. declare module 'moment' {
  19. export function myFunction(): void
  20. }
  21. m.myFunction = () => {}
  22. declare global {
  23. namespace globalLib {
  24. function doAnything(): void
  25. }
  26. }
  27. // 这样会给全局命名空间造成污染,一般不建议这样做
  28. globalLib.doSomething = () => {}
  29. // 声明文件之间的依赖