javascript - Importurile dinamice în typescript sunt defecte fie în teste, fie în timpul execuției webpack
Am un proiect TypeScript care folosește webpack pentru a compila pachetul. Folosesc Jest + ts-jest pentru testare.
Încerc să fac să funcționeze importurile dinamice, dar se pare că pot să le fac să funcționeze doar fie în teste, fie în pachet, dar nu în ambele. În acest caz, biblioteca pe care încerc să o import dinamic este zxcvbn, dar îmi imaginez că acest lucru s-ar putea aplica oricărei biblioteci.
De exemplu, am un script:
const result = import('zxcvbn').then(zxcvbn => zxcbn('foo'))
Când testez asta, testul rulează bine. De asemenea, compilă pachetul fără probleme. Totuși, când rulez în browser, primesc:
Respingere necontrolată (TypeError): zxcvbn nu este o funcție
Deci, pentru a rezolva asta, am adăugat "allowSyntheticDefaultImports": true în tsconfig.json și am schimbat linia de import în:
const result = import('zxcvbn').then(({default: zxcvbn}) => zxcbn('foo'))
Acum timpul de execuție al browserului funcționează bine, dar testul eșuează cu
TypeError: zxcvbn nu este o funcție.
Am încercat, de asemenea, să folosesc un tsconfig.test.json extins pentru teste cu "allowSyntheticDefaultImports": false, dar acest lucru duce la o eroare de compilare:
Proprietatea 'default' nu există pe tipul '(password: string, userInputs?: string[] | undefined) => ZXCVBNResult'
Ai vreo idee cum să rezolv asta? În prezent, nu folosesc Babel, doar compilatorul TypeScript + Webpack pentru împachetare.