上下文
我正在尝试将PDF.JS导入TypeScript项目。我正在使用DefinitelyTyped bindings for pdfjs-dist
,通过npm install @types/pdfjs-dist
和npm install pdfjs-dist
安装。
问题
我似乎无法让TypeScript编译我的项目。我使用的源代码直接从DefinitelyTyped的测试中复制。这是我试图编译的简化(仅删除)代码(DefinitelyTyped的测试代码的精确副本也以相同的方式失败):
import { PDFJSStatic } from 'pdfjs-dist';
var PDFJS: PDFJSStatic;
PDFJS.getDocument('helloworld.pdf').then(console.log);
TypeScript找到类型声明模块,并认为PDFJSStatic
的导入是有效的。它认为PDFJS
从未初始化过,但如果我在tsconfig
中关闭strict
,代码会编译,但它会编译为:
"use strict";
exports.__esModule = true;
var PDFJS;
PDFJS.getDocument('helloworld.pdf').then(console.log);
很明显这行不通。它不会将import
语句编译成任何东西。
问题
如何将PDF.JS导入到TypeScript项目中,并通过@types/pdfjs-dist
中的声明文件将其编译为工作的Node.JS代码?
我所尝试的
我在import
上尝试了不同的变体,都没有用。切换到require
似乎也没有帮助。
我已经验证了pdjs-dist
依赖项和@types/pdfjs-dist
依赖项是存在的,更新的,并且可以直接从NodeJS(非TypeScript程序)使用。
我在tsconfig中尝试了module
的各种值。他们有时会更改生成的代码,但没有一个更改它以包含所需的导入。
我尝试在import
行上方添加/// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" />
。这并没有改变行为。
环境
tsc
版本2.4.2、节点8.5和npm
5.3。我的项目根目录中有以下tsconfig.json
:
{
"compilerOptions": {
"allowJs":true,
"rootDir": ".",
"outDir": "dist",
"moduleResolution": "node"
},
"include": [
"src/**/*"
],
"exclude": [
"**/*.spec.ts",
"dist/**/*"
]
}
6条答案
按热度按时间xa9qqrwz1#
也许你可以使用
require
函数。添加
@types/node
包,并在源代码的顶部编写require('pdfjs-dist')
。你可以像下面这样修改代码。现在,这个代码将工作。
我认为
@types/pdfjs-dist
在实现上有问题。yduiuuwa2#
对于
@types/pdfjs-dist
2.1.0和pdfjs-dist
“2.1.266”,基本问题似乎还没有完全解决,但我发现their own test的方法是可行的:(It不过,这并不美观,因为它会污染您的名称空间。)
ttp71kqs3#
我也试过不同的方法。对我来说,最具可读性的是这一条:
fzsnzjdm4#
这对我来说很有效,而不必使用
require
:您只需将模块强制转换为
any
来消除类型错误。@types/pdfjs-dist中的输入肯定是不正确的,但这应该是一个快速的解决方案。:)
z0qdvdin5#
如果你碰巧正在使用React,你可以使用
react-pdf
包,它在后台使用pdfjs
。它也有自己的类型,所以你可以导入它,而不需要require
。9ceoxa926#
以下作品。
另外,使用一个文件“pdfjs-dist.d.ts”也没什么坏处: