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.)

Relaterte artikler