Загружать только библиотеку 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" />