コンテキスト
PDF.JS をTypeScriptプロジェクトにインポートしようとしています。 pdfjs-dist
およびnpm install @types/pdfjs-dist
を介してインストールされたDefinitelyTyped bindings for 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
が初期化されるとは思われませんが、strict
でtsconfig
をオフにすると、コードはコンパイルされますが、次のようにコンパイルされます。
"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/**/*"
]
}
多分あなたはrequire
関数を使うことができます。
_@types/node
_パッケージを追加し、ソースコードの先頭にrequire('pdfjs-dist')
を記述します。したがって、以下のようにコードを変更できます。
これで、このコードは機能します。
_import { PDFJSStatic } from 'pdfjs-dist';
const PDFJS: PDFJSStatic = require('pdfjs-dist');
PDFJS.getDocument('helloworld.pdf').then(console.log);
_
_@types/pdfjs-dist
_の実装には問題があると思います。
私もさまざまな方法を試しました。私にとって、最も読みやすいのはこれでした:
import * as pdfjslib from 'pdfjs-dist';
let PDFJS = pdfjslib.PDFJS;
PDFJS.disableTextLayer = true;
PDFJS.disableWorker = true;
@types/pdfjs-dist
2.1.0およびpdfjs-dist
"2.1.266"、根本的な問題はまだ完全には修正されていないようですが、 独自のテスト からのアプローチが機能することがわかりました:
import { getDocument, PDFDocumentProxy, PDFPromise, Util } from 'pdfjs-dist';
(ただし、名前空間を汚染するため、きれいではありません。)
これは、require
を使用せずに、私にとってはうまくいきました。
import * as pdfjslib from "pdfjs-dist";
const PDFJS = (<any>pdfjslib) as PDFJSStatic;
モジュールをany
にキャストして、タイプエラーを沈黙させる必要があります。
@ types/pdfjs-distでの入力は間違いなく間違っていますが、これは簡単な回避策です。 :)