You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为导出单个全局函数的latex包编写TypeScript声明文件?

解决TypeScript声明文件中全局函数直接调用的问题

这问题我碰到过,本质是你的声明文件把函数当成了模块的一个导出成员,而不是模块本身的导出主体。调整一下声明的写法就行,给你两个常用方案:

方案一:使用默认导出(ES模块风格)

修改你的src/@types/latex/index.d.ts文件为:

declare module 'latex' {
  import { Stream } from "stream";
  export default function latex(latex: string | string[] | Buffer | Stream): Stream;
}

之后你就可以通过默认导入直接使用函数:

import latex from 'latex';
// 现在可以直接调用:latex(你的LaTeX内容)

方案二:适配CommonJS导出(Node.js包常用)

如果这个latex包是通过module.exports = latex这种CommonJS方式导出的(大多数Node.js第三方包都是如此),更准确的声明方式是使用export =语法:

declare module 'latex' {
  import { Stream } from "stream";
  function latex(latex: string | string[] | Buffer | Stream): Stream;
  export = latex;
}

这种写法支持两种导入方式:

  • 启用allowSyntheticDefaultImports编译选项后,用ES模块风格导入:
    import latex from 'latex';
    latex(你的LaTeX内容)
    
  • 用TypeScript的require风格导入:
    import latex = require('latex');
    latex(你的LaTeX内容)
    

为什么原来的写法不行?

你原来的声明是在模块内部导出了一个名为latex的函数,当你用import * as latex from 'latex'时,导入的latex是一个包含该函数的对象,所以必须通过latex.latex()才能访问到函数。修改后的声明直接把函数作为模块的导出主体,这样导入后就可以直接调用了。

内容的提问来源于stack exchange,提问作者Gilad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:38