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

如何正确映射pdfjs-dist中分离存放的d.ts文件与JS文件?

解决pdfjs-dist类型文件与JS文件的路径映射问题

我来帮你梳理下问题所在,以及可行的解决办法:

首先得说,你之前用paths配置没生效的原因是:TypeScript的paths只负责在类型检查和模块解析阶段找到对应的类型文件,但它不会在编译成JS代码时自动替换这些路径。所以你导入pdfjs-dist/types/src/...后,TS编译出来的require路径就原样保留了,自然找不到实际的JS文件。

下面给你几个实用的解决方案,按推荐程度排序:

方案一:直接导入JS模块路径(最优解)

pdfjs-dist官方已经在package.json里配置了类型映射,你完全不需要手动导入types/src/...路径。直接导入JS文件所在的lib路径即可,TS会自动关联对应的类型定义:

import { NodeCanvasFactory } from 'pdfjs-dist/lib/display/node_utils';

这样编译后生成的JS代码就是你期望的:

const node_utils_1 = require("pdfjs-dist/lib/display/node_utils");

同时TS也能正确找到types/src/display/node_utils.d.ts的类型定义,完美兼顾类型检查和运行时路径正确性。

方案二:用tsconfig-paths处理编译后的路径(适合必须保留原导入方式的场景)

如果你因为某些原因必须保持import ... from 'pdfjs-dist/types/src/...'的导入方式,那需要借助tsconfig-paths工具来替换编译后的路径:

  1. 先安装依赖:
npm install --save-dev tsconfig-paths
  1. 保持你原来的tsconfig.json里的paths配置不变
  2. 运行编译后的代码时,需要加上tsconfig-paths/register的钩子:
# 用ts-node直接运行源码
ts-node -r tsconfig-paths/register src/your-entry-file.ts

# 或者编译后运行dist目录的代码
node -r tsconfig-paths/register dist/your-entry-file.js

这个方案需要额外的工具支持,不如方案一简洁,但能满足特定场景的需求。

方案三:自定义类型映射(适合官方类型配置有问题的情况)

如果pdfjs-dist的官方类型映射出现异常,你可以在项目里手动创建类型映射文件:

  1. 在项目根目录创建typings/pdfjs-dist/index.d.ts文件,内容如下:
declare module 'pdfjs-dist/lib/display/node_utils' {
  export { NodeCanvasFactory } from 'pdfjs-dist/types/src/display/node_utils';
}
  1. 在tsconfig.json的include数组里添加typings/**/*.d.ts,确保TS能识别这个自定义类型文件
  2. 然后就可以像方案一那样导入pdfjs-dist/lib/...路径,TS会通过自定义类型文件找到对应的类型定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:19:11