类库一般分为三类:全局类库、模块类库、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关键字可以为一个外部变量提供类型声明
模块类库声明文件
declare function moduleLib(options: Options): voidinterface Options {[key: string]: any}declare namespace moduleLib {const version: stringfunction doSomething(): void}export = moduleLib
umd类库声明文件
declare namespace umdLib {const version: stringfunction doSomething():void}export as namespace umdLibexport = umdLib
入口文件
import $ from 'jquery'// 无法找到xxx声明文件,在ts中,使用非ts类库时,必须为这个类库编写一个声明文件,对外暴露它的API,有时,它的声明文件是包含在它的源码中,但有时是单独提供需要额外安装的// 安装类声明包:@types/jquery$('.app').css('color','red')/*我们在使用外部类库时,需要查询一下有没有声明文件:http://microsoft.github.io/TypeSearchhttp://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 = () => {}// 声明文件之间的依赖
