声明文件 declare
当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。
declare var 声明全局变量
declare function 声明全局方法
declare class 声明全局类
declare enum 声明全局枚举类型
declare namespace 声明(含有子属性的)全局对象
interface 和 type 声明全局类型
/// <reference /> 三斜线指令
例如我们有一个express 和 axios
先安装axios和express
发现express 报错了
让我们去下载他的声明文件
npm install @types/node -D
那为什么axios 没有报错
我们可以去node_modules 下面去找axios 的package json
发现axios已经指定了声明文件,所以没有报错可以直接用
通过语法declare,暴露我们声明的axios 对象
declare const axios: AxiosStatic;
如果有一些第三方包确实没有声明文件我们可以自己去定义
名称.d.ts,创建一个文件去声明
index.ts
import express from 'express'
const app = express()
const router = express.Router()
app.use('/api', router)
router.get('/list', (req: any, res: any) => {
res.json({
code: 200
})
})
app.listen(9001, () => {
console.log(9001)
})
express.d.ts
declare module 'express' {
interface Router {
get(path: string, cb: (req: any, res: any) => void): void
}
interface APP {
use(path: string, router: any): void,
listen(path: number, cb?: () => void): void
}
interface Express {
(): APP,
Router(): Router
}
const express: Express;
export default express
}
额外的扩充
declare module 'express'{
interface App{
use(path:string,router:any):void,
listen(path:number,cb:()=>void):void
}
interface Router{
get(path:string,cb:(req:any,res:any)=>void):void
}
interface Express{
():App,
Router():Router
}
const express:Express,
export default express
}
//扩充变量
declare let a:number
//扩充函数
declare function f(params:type) {
console.log(params)
}
//扩充枚举
declare enum C{
a
}