Я хотел бы запросить «определения типов» для Typescript для этой библиотеки. Было бы здорово использовать эту библиотеку в моих проектах Typescript.
Спасибо.
Не могли бы вы подробнее рассказать, что это такое? Почему вы не можете использовать его в проектах 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.
Кто-нибудь сейчас работает над написанием файла декларации типов?
Исправлено запросом на перенос # 12102. Потребовалось некоторое время, чтобы прийти к решению, которое можно было поддерживать и тестировать, но благодаря упорной работе членов сообщества это сделано. В будущих выпусках pdfjs-dist
начнут поставляться определения TypeScript, созданные на основе наших комментариев JSDoc.
Мы открыты для участия сообщества в дальнейшем улучшении нашей документации по API, не только для улучшения документации по API, но и для улучшения типов, поскольку они оба генерируются из комментариев JSDoc в файлах.
Самый полезный комментарий
Я пробовал использовать типизацию из DefinuneTyped, но она настолько плохая, что это смешно. (смейтесь, чтобы не плакать)
Это последние типизации (они были перемещены): https://github.com/DefinitiTyped/DefinitiTyped/blob/master/types/pdfjs-dist/index.d.ts
Вот как бы вы их использовали:
Вы видите, как вам нужно импортировать воображаемый тип
PDFJSStatic
а затем инициализировать переменную этого типа с помощьюrequire()
? Это полная чушь. (Без обид оригинальному автору)Повторно откройте эту проблему, потому что для pdfjs требуется более качественный набор текста. Просто взгляните на несколько из этих вопросов SO:
Я думаю, что большинство людей, которые пытаются использовать pdf.js в приложении TypeScript, в конечном итоге пишут дерьмовый код или просто сдаются и пробуют что-то другое. Не помогает то, что набор текста был перемещен с
@types/pdf
на@types/pdfjs-dist
без какого-либо объявления со стороны DefinitherTyped.Так что на самом деле для разработчиков TypeScript во всем мире было бы НАМНОГО лучше, если бы пакет
pdfjs-dist
имел автономные высококачественные типы.