Pdf.js: Funktionsanfrage: Typdefinitionen für Typescript hinzufügen und auf NPM verfügbar machen.

Erstellt am 22. Dez. 2016  ·  20Kommentare  ·  Quelle: mozilla/pdf.js

Ich möchte "Typdefinitionen" für Typescript für diese Bibliothek anfordern. Es wäre großartig, diese Bibliothek in meinen Typescript-Projekten zu verwenden.

Danke.

1-other 2-feature

Hilfreichster Kommentar

Ich habe versucht, die Eingaben von DefinitelyTyped zu verwenden, aber sie sind so schlecht, dass es lächerlich ist. (lachen, damit du nicht weinst)

Dies sind die neuesten Eingaben (sie wurden verschoben): https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/pdfjs-dist/index.d.ts

So würden Sie sie verwenden:

// imports typings first
import { PDFJSStatic, PDFDocumentProxy, PDFPromise } from 'pdfjs-dist';

// then import the actual library using require() instead of import
let pdfjs: PDFJSStatic = require("pdfjs-dist");

// only then you can actually do something useful
pdfjs.getDocument('helloworld.pdf').then(function (pdf: PDFDocumentProxy ) {
  let pageNum = 1;
  renderPage(pdf, pageNum);
});

Sehen Sie, wie Sie einen imaginären Typ PDFJSStatic importieren und dann eine Variable dieses Typs mit require() initialisieren müssen? Das ist kompletter Unsinn. (Keine Beleidigung des ursprünglichen Autors)

Bitte öffnen Sie dieses Problem erneut, da eine bessere Eingabequalität für pdfjs erforderlich ist. Schauen Sie sich einfach ein paar dieser SO-Fragen an:

Ich denke, dass die meisten Leute, die versuchen, pdf.js in einer TypeScript-App zu verwenden, am Ende Mist schreiben oder einfach aufgeben und etwas anderes ausprobieren. Es hilft nicht, dass die Eingaben von @types/pdf auf @types/pdfjs-dist verschoben wurden, ohne dass DefinitelyTyped eine Ankündigung machte.

Es wäre also für TypeScript-Entwickler überall VIEL besser, wenn das pdfjs-dist Paket in sich geschlossene, qualitativ hochwertige Eingaben hätte.

Alle 20 Kommentare

Könnten Sie etwas näher erläutern, was das genau ist? Warum können Sie es gerade nicht in TypeScript-Projekten verwenden und wie groß ist diese Änderung?

Es ist möglich, Definitionsdateien aus display/api.js neu zu erstellen, und es ist einfacher für Personen, die dies bereits getan haben. Wir werden den Stil von https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html anpassen. Ein Problem wird darin bestehen, api.js und Definitionsdateien synchron zu halten, aber es wird einfacher, nachdem letztere erstellt wurden.

Beachten Sie, dass pdf.d.ts für die Datei pdfjs-dist/build/pdf.js erstellt werden soll und nicht für Dateien im Ordner src/.

Ich bin mir nicht sicher, wie viel Arbeit es ist, "Typdeklarationsdateien" zu erstellen, da ich selbst keine Erfahrung mit dem Erstellen von "Typdeklarationsdateien" habe.

Ich denke, Sie können Javascript-Bibliotheken von Drittanbietern in Typescript ohne "Typdeklarationsdateien" verwenden, aber wenn "Typdeklarationsdateien" verfügbar sind, können Sie bei der Verwendung von Bibliotheken von Drittanbietern umfangreiche Intelligenz erhalten.

https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html ist eine gute Ressource, um mit dem Erlernen von "Typdeklarationsdateien" zu beginnen.

Ich würde es vorziehen, wenn Sie die "Typdeklarationsdateien" auch auf NPM zur Verfügung stellen könnten. Es macht es einfach, sie in ein Projekt einzubinden.

Zum Beispiel mit dem folgenden Befehl: npm install @types/pdfjs-dist --save-dev

Die Veröffentlichung über "@types/" ist eine Möglichkeit, dies zu tun und wird normalerweise von Drittanbietern erstellt. Wenn wir uns verpflichtet haben, .d.ts-Dateien zu unterstützen, können sie in das package.json-Manifest von pdfjs-dist aufgenommen werden (es gibt keinen Grund, sie in ein separates npm-Paket afaik zu legen).

PS Siehe https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html für die Unterschiede.

Anscheinend können Sie "Typenerklärungsdateien" zusammen mit Ihrem bereits vorhandenen NPM-Paket bündeln. Ich habe das vergessen. Sie müssen sie nicht unter @types/ veröffentlichen.

Dafür gibt es eine d.ts-Datei im DefinitelyTyped-Repository :

Ich habe nicht überprüft, wie vollständig oder genau es ist, aber es könnte ein guter Ausgangspunkt sein.

Ich habe versucht, die Eingaben von DefinitelyTyped zu verwenden, aber sie sind so schlecht, dass es lächerlich ist. (lachen, damit du nicht weinst)

Dies sind die neuesten Eingaben (sie wurden verschoben): https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/pdfjs-dist/index.d.ts

So würden Sie sie verwenden:

// imports typings first
import { PDFJSStatic, PDFDocumentProxy, PDFPromise } from 'pdfjs-dist';

// then import the actual library using require() instead of import
let pdfjs: PDFJSStatic = require("pdfjs-dist");

// only then you can actually do something useful
pdfjs.getDocument('helloworld.pdf').then(function (pdf: PDFDocumentProxy ) {
  let pageNum = 1;
  renderPage(pdf, pageNum);
});

Sehen Sie, wie Sie einen imaginären Typ PDFJSStatic importieren und dann eine Variable dieses Typs mit require() initialisieren müssen? Das ist kompletter Unsinn. (Keine Beleidigung des ursprünglichen Autors)

Bitte öffnen Sie dieses Problem erneut, da eine bessere Eingabequalität für pdfjs erforderlich ist. Schauen Sie sich einfach ein paar dieser SO-Fragen an:

Ich denke, dass die meisten Leute, die versuchen, pdf.js in einer TypeScript-App zu verwenden, am Ende Mist schreiben oder einfach aufgeben und etwas anderes ausprobieren. Es hilft nicht, dass die Eingaben von @types/pdf auf @types/pdfjs-dist verschoben wurden, ohne dass DefinitelyTyped eine Ankündigung machte.

Es wäre also für TypeScript-Entwickler überall VIEL besser, wenn das pdfjs-dist Paket in sich geschlossene, qualitativ hochwertige Eingaben hätte.

@StevenLiekens hat vollkommen recht. Die Typdefinitionsdatei @types/pdfjs-dist ist eine TRAGEDY . Es hat nicht einmal GlobalWorkerOptions . Ist es für Mozilla so schwer, eine Typdefinitionsdatei für dieses Projekt bereitzustellen? Wir erwarten mehr von Mozilla.

Das stoßen. @types/pdfjs-dist ist nicht einmal annähernd brauchbar.

Kämpfe auch durch @types/pdfjs-dist . Nichts vom Textebenen-Rendering ist darin enthalten. Ich habe auf die Erweiterung des Moduls durch das Zusammenführen von Deklarationen zurückgegriffen:

declare module "pdfjs-dist" {
    export interface TextLayerRenderTask extends PDFLoadingTask<void> { }
    export interface RenderTextLayerOptions {
        textContent: TextContent;
        viewport: PDFPageViewport;
        container: HTMLElement;
    }
    export function renderTextLayer(options: RenderTextLayerOptions): TextLayerRenderTask;
}

@SandyGifford ja ... die pdf.js-Typoskripttypen sind anscheinend sehr, sehr altbacken.

Wenn ich eine PR einsende, können wir dies offiziell unterstützen? Die API ist nicht so schwierig.

Das ist wirklich wirklich wirklich nötig. pdf.js ist großartig/funktionell, aber die API ist im Wesentlichen nicht dokumentiert. Das muss WIRKLICH korrigiert werden.

+1, wir brauchen richtige Typdefinitionen!

Bitte geben Sie dem Top-Kommentar +1, anstatt zu antworten, damit wir das Interesse der Community leichter einschätzen können. Darüber hinaus wird daran gearbeitet; siehe #11235, das vor zwei Tagen gelandet ist, und #11209, das vor sechs Tagen gelandet ist, beide um die JSDoc-Kommentare für eine bessere Dokumentation und die Generierung von TypeScript-Definitionen zu verbessern.

Arbeitet gerade jemand daran, eine Typendeklarationsdatei zu schreiben?

10575 wurde erneut bearbeitet, und wir haben beschlossen, dass wir die TypeScript-Definitionen auf diese Weise bereitstellen möchten.

Behoben durch Pull-Request #12102. Es hat einige Zeit gedauert, bis eine Lösung gefunden wurde, die sowohl wartbar als auch getestet war, aber dank der harten Arbeit der Community-Mitglieder ist es jetzt geschafft. Zukünftige pdfjs-dist Releases werden mit dem Versand der TypeScript-Definitionen beginnen, die aus unseren JSDoc-Kommentaren generiert wurden.

Wir sind offen für Beiträge aus der Community, um unsere API-Dokumentation noch weiter zu verbessern, nicht nur für eine bessere API-Dokumentation, sondern auch für bessere Typen, da beide aus den JSDoc-Kommentaren in den Dateien generiert werden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen