javascript - Last kun highlight.js-biblioteket ved hjelp av TypeScript, ikke standard med alle språk lastet
Som det offisielle dokumentet for bruk av highlight.js foreslår:
Standardimporten importerer alle språk! Derfor er det sannsynligvis mer effektivt å bare importere biblioteket og språkene du trenger:
import hljs from 'highlight.js/lib/highlight';
import javascript from 'highlight.js/lib/languages/javascript';
hljs.registerLanguage('javascript', javascript);
Jeg prøver å laste kun highlight.js-biblioteket, sammen med individuelle språkmoduler for å redusere fotavtrykket mitt for TS-appen min.
Ved å bruke @types/highlight.js-deklarasjonsfilen, er den eneste måten (som jeg kan finne) å importere highlight.js på slik:
import * as hljs from 'highlight.js';Dessverre laster det standardeksporten, som har alle de leverte språkene lastet.
Når jeg ser på highlight.js-modulen, vil jeg gjøre noe sånt som dette:
import * as hljs from 'highlight.js/lib/highlight.js';
import * xml from 'highlight.js/lib/languages/xml';
...
hljs.registerLanguage('xml', xml);
så jeg får bare selve biblioteket, sammen med det eneste språket jeg trenger (xml).
Så langt har jeg vært i stand til å legge til disse linjene i en .d.ts-fil for å få TypeScript til å ikke klage på disse importene:
declare module 'highlight.js/lib/highlight';
declare module 'highlight.js/lib/language/xml';
Men selvfølgelig, det betyr at jeg mister innholdsassistenten min når jeg importerer hljs. Jeg kunne duplisere innholdet i @types/highlight.js til min egen .d.ts-fil, men jeg vil virkelig gjerne unngå det.
Finnes det noen måte jeg kan videresende deklarasjonene fra @types/highlight.js til modulen highlight.js/lib/highlight'? Eller kanskje en annen tilnærming jeg går glipp av.
Takk på forhånd.
Svar #1
Jeg løste dette problemet ved å lage en Javascript-fil som bare krever de språkene jeg trenger:
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;
Og ved å importere denne filen i Typescript-koden min:
import hljs from './myhighlight';
export class SomeClass {
highlight(code: string) {
return hljs.highlightAuto(code).value;
}
}
Svar #2
Bare inkluder typene ved å legge til denne linjen øverst i en av dine *.d.ts-filer (f.eks. global.d.ts)
/// <reference types="highlight.js/types/index.d.ts" />
