Загружать только библиотеку highlight.js с использованием TypeScript, не по умолчанию со всеми загруженными языками

Как следует из официального документа по использованию highlight.js:

Импорт по умолчанию импортирует все языки! Поэтому, вероятно, будет более эффективно импортировать только те библиотеки и языки, которые вам нужны:

import hljs from 'highlight.js/lib/highlight';
import javascript from 'highlight.js/lib/languages/javascript';
hljs.registerLanguage('javascript', javascript);

Я пытаюсь загрузить только highlight.js библиотека, а также отдельные языковые модули, чтобы уменьшить объем моего приложения TS.

С использованием @types/highlight.js файл объявлений, единственный способ (который я могу найти) импортировать highlight.js - это так:

import * as hljs from 'highlight.js';

К сожалению, при этом загружается экспорт по умолчанию, в который загружены все поставляемые языки.

Глядя в модуль highlight.js, я хочу сделать что-то вроде этого:

import * as hljs from 'highlight.js/lib/highlight.js';
import * xml from 'highlight.js/lib/languages/xml';
...
hljs.registerLanguage('xml', xml);

поэтому я получаю только саму библиотеку вместе с единственным языком, который мне нужен (xml).

До сих пор я смог добавить эти строки в файл.d.ts, чтобы TypeScript не жаловался на этот импорт:

declare module 'highlight.js/lib/highlight';
declare module 'highlight.js/lib/language/xml';

Но, конечно, это означает, что при импорте я теряю содержание hljs, Я мог бы дублировать содержание @types/highlight.js в мой собственный файл.d.ts, но я бы очень хотел этого избежать.

Есть ли способ, чтобы я мог прокси декларации от @types/highlight.js на модуль highlight.js/lib/highlight'? Или, может быть, какой-то другой подход, который мне не хватает

Заранее спасибо.

2 ответа

Я решил эту проблему, создав файл Javascript, для которого требуются только нужные мне языки:

myhighlight.js

var hljs = require('../../../node_modules/highlight.js/lib/highlight');
hljs.registerLanguage('typescript', require('../../../node_modules/highlight.js/lib/languages/typescript'));
hljs.registerLanguage('json', require('../../../node_modules/highlight.js/lib/languages/json'));
module.exports = hljs;

И, импортировав этот файл в мой код Typescript:

import hljs from './myhighlight';

export class SomeClass {
  highlight(code: string) {
    return hljs.highlightAuto(code).value;
  }
}

Просто включите типы, добавив эту строку вверху одного из ваших*.d.tsфайлы (например,global.d.ts)

      /// <reference types="highlight.js/types/index.d.ts" />
Другие вопросы по тегам