Hvordan kan jeg få TypeScript til å laste PDF.js NPM-modulen og @types-bindingene på en måte som genererer fungerende Node.JS-kode?
Kontext
Jeg prøver å importere PDF.JS inn i et TypeScript-prosjekt. Jeg bruker DefinitelyTyped-bindingene for pdfjs-dist, installert via npm install @types/pdfjs-dist og npm install pdfjs-dist.
Problem
Jeg får det ikke til å få TypeScript til å kompilere prosjektet mitt. Jeg bruker kildekode kopiert rett fra testene på DefinitelyTyped. Dette er den forenklede (kun slettinger) koden jeg prøver å kompilere (en nøyaktig kopi av testkoden fra DefinitelyTyped feiler også på samme måte):
import { PDFJSStatic } from 'pdfjs-dist';
var PDFJS: PDFJSStatic;
PDFJS.getDocument('helloworld.pdf').then(console.log);
TypeScript finner typedeclarationsmodulen, og anser importen av PDFJSStatic som gyldig. Den tror ikke at PDFJS noen gang initialiseres, men hvis jeg slår av strict i tsconfig, kompileres koden, men den kompileres til:
"use strict";
exports.__esModule = true;
var PDFJS;
PDFJS.getDocument('helloworld.pdf').then(console.log);
Som åpenbart ikke fungerer. Den kompilerer ikke import-setningen til noe som helst.
Spørsmål
Hvordan kan jeg importere PDF.JS inn i et TypeScript-prosjekt og kompilere det til fungerende Node.JS-kode via deklarasjonsfilene i @types/pdfjs-dist?
Hva jeg har prøvd
Jeg har prøvd forskjellige varianter av import, uten hell. Å bytte til require ser heller ikke ut til å hjelpe.
Jeg har bekreftet at pdjs-dist-avhengigheten og @types/pdfjs-dist-avhengighetene er til stede, oppdaterte og kan brukes direkte fra NodeJS (ikke-TypeScript-programmer).
Jeg har prøvd ulike verdier for module i min tsconfig. De endrer koden som genereres noen ganger, men ingen av dem endrer den slik at den inneholder den nødvendige importen.
Jeg har prøvd å legge til /// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" /> over import-linjen. Det endret ikke oppførselen.
Miljø
tsc versjon 2.4.2, node 8.5, og npm 5.3. Jeg har følgende tsconfig.json i prosjektets rot:
{
"compilerOptions": {
"allowJs":true,
"rootDir": ".",
"outDir": "dist",
"moduleResolution": "node"
},
"include": [
"src/**/*"
],
"exclude": [
"**/*.spec.ts",
"dist/**/*"
]
}
Svar #1
Kanskje du kan bruke require-funksjonen.
Legg til @types/node-pakker, og skriv require('pdfjs-dist') øverst i kildekoden din. Så kan du endre koden din som vist nedenfor.
Nå vil denne koden fungere.
import { PDFJSStatic } from 'pdfjs-dist';
const PDFJS: PDFJSStatic = require('pdfjs-dist');
PDFJS.getDocument('helloworld.pdf').then(console.log);
Jeg tror at @types/pdfjs-dist har problemer i implementeringen sin.
Svar #2
Med @types/pdfjs-dist 2.1.0 og pdfjs-dist "2.1.266", ser det grunnleggende problemet fortsatt ikke ut til å være helt fikset, men jeg har funnet ut at tilnærmingen fra deres egen test fungerer:
import { getDocument, PDFDocumentProxy, PDFPromise, Util } from 'pdfjs-dist';
(Det er ikke pen, da det forurenser navnerommet ditt.)
