首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建'module.exports‘函数的定义

如何创建'module.exports‘函数的定义
EN

Stack Overflow用户
提问于 2018-02-28 12:37:54
回答 1查看 63关注 0票数 1

我正在导出一个像这样的函数,它可以工作。

代码语言:javascript
复制
module.exports = function (options: any): RequestHandler {
    // Do stuff
}

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

代码语言:javascript
复制
declare global {
  export function tsm(options: any): RequestHandler
}

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

代码语言:javascript
复制
const tsm = require('ts-middleware')

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

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

我不想像这样使用这个函数:

代码语言:javascript
复制
const tsm = require('ts-middleware')
tsm.tsm()

但我确实想这样使用它:

代码语言:javascript
复制
const tsm = require('ts-middleware')
tsm()
EN

回答 1

Stack Overflow用户

发布于 2018-02-28 14:02:52

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

代码语言:javascript
复制
declare module 'ts-middleware' {
  export = (option: any): RequestHandler
}

但是,您实际上并不需要这样做,因为您的代码是用TypeScript编写的。编译器可以自动为您生成类型。

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

代码语言:javascript
复制
// tsconfig.json
{
  "compilerOptions": {
    "declaration": true
  }
}

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

代码语言:javascript
复制
// 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(...)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49022070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档