如何让TypeScript以生成Node.JS代码的方式加载PDF.js NPM模块和@types绑定?

Zac*_*c B 6 import module node.js typescript pdfjs

上下文

我正在尝试将PDF.JS导入TypeScript项目.我使用的是DefinitelyTyped 绑定pdfjs-dist,通过安装npm install @types/pdfjs-distnpm install pdfjs-dist.

问题

我似乎无法使用TypeScript来编译我的项目.我正在使用直接从DefinitelyTyped上的测试中复制的源代码.这是我正在尝试编译的简化(仅删除)代码(来自DefinitelyTyped的测试代码的精确副本也以相同的方式失败):

import { PDFJSStatic } from 'pdfjs-dist';
var PDFJS: PDFJSStatic;
PDFJS.getDocument('helloworld.pdf').then(console.log);
Run Code Online (Sandbox Code Playgroud)

TypeScript查找类型声明模块,并认为导入PDFJSStatic有效.它不认为PDFJS是以往任何时候都初始化,但是如果我关掉stricttsconfig,代码编译,但它编译于:

"use strict";
exports.__esModule = true;
var PDFJS;
PDFJS.getDocument('helloworld.pdf').then(console.log);
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.它没有将import声明编译成任何东西.

如何将PDF.JS导入TypeScript项目并通过声明文件将其编译为工作的Node.JS代码@types/pdfjs-dist

我试过的

我尝试了不同的变化import,但无济于事.切换到require也似乎没有帮助.

我已经验证了pdjs-dist依赖关系以及@types/pdfjs-dist依赖关系是否直接来自NodeJS(非TypeScript程序),是否存在,更新和可用.

module在tsconfig中尝试了各种值.它们有时会更改生成的代码,但它们都没有更改它以包含所需的导入.

我试着将/// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" />上面的import线.这并没有改变这种行为.

环境

tsc版本2.4.2,节点8.5和npm5.3.我的tsconfig.json项目根目录中有以下内容:

{
    "compilerOptions": {
        "allowJs":true,
        "rootDir": ".",
        "outDir": "dist",
        "moduleResolution": "node"
    },
     "include": [
        "src/**/*"
    ],
    "exclude": [
        "**/*.spec.ts",
        "dist/**/*"
    ]
}
Run Code Online (Sandbox Code Playgroud)

Azo*_*son 7

也许你可以使用require功能.

添加@types/node包,并require('pdfjs-dist')在源代码的顶部写入.因此,您可以修改您的代码,如下所示.

现在,这段代码将起作用.

import { PDFJSStatic } from 'pdfjs-dist';
const PDFJS: PDFJSStatic = require('pdfjs-dist');
PDFJS.getDocument('helloworld.pdf').then(console.log);
Run Code Online (Sandbox Code Playgroud)

我认为@types/pdfjs-dist它的实施存在问题.

  • 现在,这段代码将起作用.从'pdfjs-dist'导入{PDFJSStatic}; const PDFJS:PDFJSStatic = require('pdfjs-dist'); PDFJS.getDocument( 'helloworld.pdf')然后(的console.log).我认为`@ types/pdfjs-dist`的实现存在问题. (2认同)

Sör*_*lau 5

对于@types/pdfjs-dist2.1.0 和pdfjs-dist“2.1.266”,根本问题似乎仍然没有完全解决,但我发现他们自己的测试方法有效:

import { getDocument, PDFDocumentProxy, PDFPromise, Util } from 'pdfjs-dist';
Run Code Online (Sandbox Code Playgroud)

(不过,这并不漂亮,因为它污染了你的命名空间。)