Pdf.js: Запрос функции: добавьте определения типов для Typescript и сделайте их доступными в NPM.

Созданный на 22 дек. 2016  ·  20Комментарии  ·  Источник: mozilla/pdf.js

Я хотел бы запросить «определения типов» для Typescript для этой библиотеки. Было бы здорово использовать эту библиотеку в моих проектах Typescript.

Спасибо.

1-other 2-feature

Самый полезный комментарий

Я пробовал использовать типизацию из DefinuneTyped, но она настолько плохая, что это смешно. (смейтесь, чтобы не плакать)

Это последние типизации (они были перемещены): https://github.com/DefinitiTyped/DefinitiTyped/blob/master/types/pdfjs-dist/index.d.ts

Вот как бы вы их использовали:

// 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);
});

Вы видите, как вам нужно импортировать воображаемый тип PDFJSStatic а затем инициализировать переменную этого типа с помощью require() ? Это полная чушь. (Без обид оригинальному автору)

Повторно откройте эту проблему, потому что для pdfjs требуется более качественный набор текста. Просто взгляните на несколько из этих вопросов SO:

Я думаю, что большинство людей, которые пытаются использовать pdf.js в приложении TypeScript, в конечном итоге пишут дерьмовый код или просто сдаются и пробуют что-то другое. Не помогает то, что набор текста был перемещен с @types/pdf на @types/pdfjs-dist без какого-либо объявления со стороны DefinitherTyped.

Так что на самом деле для разработчиков TypeScript во всем мире было бы НАМНОГО лучше, если бы пакет pdfjs-dist имел автономные высококачественные типы.

Все 20 Комментарий

Не могли бы вы подробнее рассказать, что это такое? Почему вы не можете использовать его в проектах TypeScript прямо сейчас и насколько велико это изменение?

Можно воссоздать файлы определений из display / api.js, и это будет проще для человека, который уже сделал это. Мы адаптируем стиль из https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html . Проблема будет в том, чтобы синхронизировать api.js и файлы определений, но это будет проще после создания последнего.

Обратите внимание, что pdf.d.ts создается для файла pdfjs-dist / build / pdf.js, а не для файлов в папке src /.

Я не уверен, сколько работы нужно для создания «файлов объявления типов», потому что у меня нет опыта создания «файлов объявлений типов».

Я думаю, что вы можете использовать сторонние библиотеки Javascript в Typescript без «файлов декларации типа», но когда доступны «файлы декларации типа», вы можете получить богатый intellisense при использовании сторонних библиотек.

https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html - хороший ресурс для начала изучения «файлов объявлений типов».

Я бы предпочел, чтобы вы также могли сделать «файлы объявления типа» доступными в NPM. Это позволяет легко включить их в проект.

Например, используя следующую команду: npm install @ types / pdfjs-dist --save-dev

Публикация их через "@ types /" - один из способов сделать это, и обычно его делают сторонние участники. Если мы намерены включить поддержку файлов .d.ts, то они могут быть включены в манифест pdfjs-dist package.json (нет причин помещать их в отдельный пакет npm afaik)

PS См. Https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html, чтобы узнать о различиях.

Очевидно, вы можете связать «файлы объявления типа» вместе с уже существующим пакетом NPM. Я забыл об этом. Нет необходимости публиковать их в @ types /

Для этого есть файл d.ts в репозитории ОпределенноТипед: ОпределенноТипированный pdf.js

Я не проверял, насколько он полон или точен, но, возможно, это хорошая отправная точка.

Я пробовал использовать типизацию из DefinuneTyped, но она настолько плохая, что это смешно. (смейтесь, чтобы не плакать)

Это последние типизации (они были перемещены): https://github.com/DefinitiTyped/DefinitiTyped/blob/master/types/pdfjs-dist/index.d.ts

Вот как бы вы их использовали:

// 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);
});

Вы видите, как вам нужно импортировать воображаемый тип PDFJSStatic а затем инициализировать переменную этого типа с помощью require() ? Это полная чушь. (Без обид оригинальному автору)

Повторно откройте эту проблему, потому что для pdfjs требуется более качественный набор текста. Просто взгляните на несколько из этих вопросов SO:

Я думаю, что большинство людей, которые пытаются использовать pdf.js в приложении TypeScript, в конечном итоге пишут дерьмовый код или просто сдаются и пробуют что-то другое. Не помогает то, что набор текста был перемещен с @types/pdf на @types/pdfjs-dist без какого-либо объявления со стороны DefinitherTyped.

Так что на самом деле для разработчиков TypeScript во всем мире было бы НАМНОГО лучше, если бы пакет pdfjs-dist имел автономные высококачественные типы.

@StevenLiekens абсолютно прав. Файл определения типа @types/pdfjs-dist - это ТРАГЕДИЯ . В нем нет даже GlobalWorkerOptions . Так ли сложно для Mozilla предоставить файл определения типа для этого проекта? Мы ожидаем большего от Mozilla.

Натыкаясь на это. @types/pdfjs-dist даже близко не к использованию.

Также борется с @types/pdfjs-dist . В нем нет рендеринга текстового слоя. Я прибег к расширению модуля путем слияния деклараций:

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 да ... типы машинописных текстов pdf.js кажутся очень устаревшими.

Если я пришлю PR, можем ли мы получить официальную поддержку? API не так уж и сложен.

Это действительно действительно очень нужно. pdf.js отличный / функциональный, но API по сути недокументирован. Это ДЕЙСТВИТЕЛЬНО нужно исправить.

+1, нам нужны правильные определения типов!

Пожалуйста, добавьте +1 к верхнему комментарию вместо ответа, чтобы нам было легче оценить интерес сообщества. Более того, работа над этим ведется; см. # 11235, который появился два дня назад, и # 11209, который приземлился шесть дней назад, чтобы улучшить комментарии JSDoc для лучшей документации и генерации определений TypeScript.

Кто-нибудь сейчас работает над написанием файла декларации типов?

Над 10575 снова работали, и мы решили, что именно так мы хотели бы предоставить определения TypeScript.

Исправлено запросом на перенос # 12102. Потребовалось некоторое время, чтобы прийти к решению, которое можно было поддерживать и тестировать, но благодаря упорной работе членов сообщества это сделано. В будущих выпусках pdfjs-dist начнут поставляться определения TypeScript, созданные на основе наших комментариев JSDoc.

Мы открыты для участия сообщества в дальнейшем улучшении нашей документации по API, не только для улучшения документации по API, но и для улучшения типов, поскольку они оба генерируются из комментариев JSDoc в файлах.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги