declare module

// index.d.ts文件是描述该插件如何使用的说明,如果插件缺失该文件import时候会报错
import Axios from 'axios' // 不会报错,通过ctrl+点击会进去该index.d.ts文件
// express缺失index.d.ts直接import会报错
// 方法1:安装 @types/express,可以解决该问题,但是不是所有插件都会有@types插件
// import Express from 'express'
// 方法2:自己写一个声明文件
import Express from 'express'

// 模拟express使用get写接口需要调用的方法
const app = Express()
const router = Express.Router()
app.use('/api',router)
router.get('/api',(req:any,res:any) => {
  res.json({
    code: 200
  })
})
app.listen(9001,()=> {
  console.log('9001');
})


// 对应.d.ts文件
p = 1

k('1')

Aue

L
// 使用declar module语法声明,则import express不会报错
declare module 'express' {
  interface App {
    // 对照express调用方法:app.use('./api/,router)
    use(path:string,router:any):void
    // 对照express调用方法:app.listen()
    listen(port:number,cb?:()=>void):void
  }
  interface Express {
    // 对照express调用方法:const app = Express()
    ():App
    // 对照express调用方法:const router = app.Router()
    Router():Router
  }
  interface Router {
    // 对照express调用方法:
    // router.get('/api',(req:any,res:any) => {
    //   res.json({
    //     code: 200
    //   })
    // })
    get:(path:string,cb:(request:any,result:any)=>void)=>void
  }
  const express:Express
  // Express作为外部的第一入口
  export default express
}

// declare后可以全局使用
declare var p:number
declare function k(params:string) {
  
}
declare class Aue {

}
declare enum L {
  
}

 

posted on 2025-02-16 16:54  ChoZ  阅读(5)  评论(0编辑  收藏  举报

导航