Q&A
前提
TypeScriptでPDFのテキストを抽出するシステムを作っています。
jsonオブジェクトのキーを指定したときに以下のエラーメッセージが発生しました。
実現したいこと
TypeScriptからの怒られを解消したい
- エラーメッセージ①を解消するために、
text[0]
がTextItem
であることをTypeScriptに伝えたい - 型チェックで
text
がTextMarkedContent[]型
でないことをチェックしたい- ここでエラーメッセージ②が発生する
発生している問題・エラーメッセージ
エラーメッセージ①
プロパティ 'str' は型 'TextItem | TextMarkedContent' に存在しません。 プロパティ 'str' は型 'TextMarkedContent' に存在しません。
エラーメッセージ②
プロパティ 'TextMarkedContent' は型 'typeof import("/Applications/MAMP/htdocs/layer/node_modules/pdfjs-dist/types/src/display/api")' に存在しません。
該当のソースコード
src/lambda/pdf.ts
1import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf"; 2import * as pdfjsLibType from "pdfjs-dist/types/src/display/api"; 3 4async function GetTextFromPDF(path: string) { 5 let doc = await pdfjsLib.getDocument(path).promise; 6 let page1 = await doc.getPage(1); 7 let content = await page1.getTextContent(); 8 let strings = content.items.map(function (item) { 9 return item; 10 }); 11 return strings; 12} 13 14(async () => { 15 try { 16 const text = await GetTextFromPDF("./pdf/document.pdf"); 17 if (typeof text === pdfjsLibType.TextMarkedContent[]) { // ここでエラーメッセージ②が発生 18 throw new Error("invalid Type"); 19 } 20 console.log("[text]", text); 21 console.log("[text[0].str]", text[0].str); // ここでエラーメッセージ①が発生 22 } catch (error) { 23 console.log(error); 24 } 25})();
試したこと
.d.ts ファイルを自作してimportするを参考に、node_modules/pdfjs-dist/types/src/display/apiをnode_modules/@typesにコピーして、
import * as pdfjsLibType from "pdfjs-dist/types/src/display/api";
の部分を
import * as pdfjsLibType from "api";
にしてみたが、エラーが解消されず。
補足情報(FW/ツールのバージョンなど)
PC:MacbookPro
言語:TypeScript 4.6.4
nodeパッケージ:pdfjs-dist ^2.13.261
雛形はcdk init app --language typescript で作成しました
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。