如何为导出单个全局函数的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
相关产品推荐
相关产品推荐

