如何为'module.exports'函数创建定义

时间:2018-02-28 04:37:54

标签: javascript typescript

我正在导出这样的功能。

module.exports = function (options: any): RequestHandler {
    // Do stuff
}

我正在尝试为导出的函数添加一个定义,但我不确定这是否是正确的方法:

declare global {
  export function tsm(options: any): RequestHandler
}

当我尝试测试时,以下两个都说这是有效的:

const tsm = require('ts-middleware')

global.tsm() // Gives intellisense
tsm()        // Also gives intellisense

它不应该提供有关global.tsm()的信息,所以我认为我的定义错误。创建函数定义的正确方法是什么?

我不想使用这样的功能:

const tsm = require('ts-middleware')
tsm.tsm()

但我确实想这样使用它:

const tsm = require('ts-middleware')
tsm()

1 个答案:

答案 0 :(得分:0)

要定义模块的输入,请使用declare module 'x' {...}。即:

declare module 'ts-middleware' {
  export = (option: any): RequestHandler
}

但是,您并不需要这样做,因为您在TypeScript中编写了代码。编译器可以自动为您生成输入。

您只需在declaration: true中添加tsconfig.json

// tsconfig.json
{
  "compilerOptions": {
    "declaration": true
  }
}

另外,我强烈建议您使用ESM编写代码。即代替module.exports = ...

// named export, preferred
export function foo(options: any): RequestHandler { ... }

// or default export
export default function foo(options: any): RequestHandler { ... }

// import in TypeScript for named export
import { foo } from 'ts-middleware'

// import in TypeScript for default export
import foo from 'ts-middleware'

// require in JavaScript commonjs
const middleware = require('ts-middleware')
middleware.foo(...)