Context
I'm trying to import PDF.JS into a TypeScript project. I'm using the DefinitelyTyped bindings for pdfjs-dist
, installed via npm install @types/pdfjs-dist
and npm install pdfjs-dist
.
Problem
I can't seem to get TypeScript to compile my project. I'm using source code copied straight from the tests on DefinitelyTyped. This is the simplified (deletions only) code I'm trying to compile (an exact copy of the test code from DefinitelyTyped also fails in the same way):
import { PDFJSStatic } from 'pdfjs-dist';
var PDFJS: PDFJSStatic;
PDFJS.getDocument('helloworld.pdf').then(console.log);
TypeScript finds the type declarations module, and considers the import of PDFJSStatic
to be valid. It doesn't think PDFJS
is ever initialized, but if I turn off strict
in tsconfig
, the code compiles, but it compiles to:
"use strict";
exports.__esModule = true;
var PDFJS;
PDFJS.getDocument('helloworld.pdf').then(console.log);
Which obviously doesn't work. It's not compiling the import
statement into anything.
Question
How can I import PDF.JS into a TypeScript project and compile it into working Node.JS code via the declaration files in @types/pdfjs-dist
?
What I've Tried
I've tried different variations on import
, to no avail. Switching to require
also doesn't seem to help.
I've verified that the pdjs-dist
dependency, and the @types/pdfjs-dist
dependencies are present, updated, and usable directly from NodeJS (non-TypeScript programs).
I've tried various values for module
in my tsconfig. They change the generated code sometimes, but none of them change it to contain the needed import.
I've tried adding /// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" />
above the import
line. That didn't change the behavior.
Environment
tsc
version 2.4.2, node 8.5, and npm
5.3. I have the following tsconfig.json
in my project root:
{
"compilerOptions": {
"allowJs":true,
"rootDir": ".",
"outDir": "dist",
"moduleResolution": "node"
},
"include": [
"src/**/*"
],
"exclude": [
"**/*.spec.ts",
"dist/**/*"
]
}
With @types/pdfjs-dist
2.1.0 and pdfjs-dist
"2.1.266", the fundamental issue still doesn't quite seem fixed, but I've found that the approach from their own test works:
import { getDocument, PDFDocumentProxy, PDFPromise, Util } from 'pdfjs-dist';
(It's not pretty, though, as it pollutes your namespace.)
Maybe you can use require
function.
Add @types/node
packages, and write require('pdfjs-dist')
at the top of the your source code.
So, you can modify your code like below.
Now, this code will work.
import { PDFJSStatic } from 'pdfjs-dist';
const PDFJS: PDFJSStatic = require('pdfjs-dist');
PDFJS.getDocument('helloworld.pdf').then(console.log);
I think that @types/pdfjs-dist
has problems in its implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With