У компании есть старый JS-файл с именем legacy.js
.
Цель состоит в том, чтобы использовать этот файл в новом модуле, который пишется с использованием
.
Машинопись. Назовем его модулем «перемычка».
Затем другой разработчик извлечет этот модуль из git и использует его в проекте под названием «jumperdemo» и получит следующую ошибку:
Failed to compile.
../jumper/dist/index.js Module not found: Can't resolve 'Legacy' in '{base path}\jumper\dist'
Простые шаги репо:
git clone https://github.com/warrick-eosny/jumper.git
cd jumper
npm install
tsc
cd dist
npm link
cd ..
git clone https://github.com/warrick-eosny/jumpdemo.git
cd jumpdemo
npm install
npm link jumper
yarn start
Мне становится ясно, что этот паттерн не работает, но неясно, какой паттерн лучше.
Я знаю, что я не первый человек, который захочет включить устаревший JS в модуль TS, поэтому мне явно не хватает чего-то важного.






Сначала измените файл *.d.ts.
declare module 'Legacy', чтобы объявить модуль ./relative.export default class..., чтобы соответствовать стилю экспорта legacy.js.src/legacy.d.ts, чтобы его путь соответствовал пути устаревшего модуля.Затем измените файл src/index.ts, чтобы импортировать и реализовать экспорт по умолчанию для устаревшего класса.
Результат будет выглядеть так (с опущенным кодом).
// src/index.ts
import legacy from './legacy';
let oldObj = new legacy();
// src/legacy.js (unchanged)
export default class OldOldClass {
runSuperOldLogic(someInput) {
console.info('really old logic run ' + someInput);
}
}
// src/legacy.d.ts
export default class OldOldClass {
runSuperOldLogic(someInput: string): any;
}
В документах TypeScript есть статья при переходе с JavaScript. Слишком много подходов к их детализации. Вот два, которые могут соответствовать вашей ситуации: используйте allowJs для использования локального JavaScript без типов; или измените legacy.js на legacy.ts и поместите типы в соответствие с реализацией.
Я раздвоил ваше потрясающее репо с минимальным сэмплом и сделал для него пиар здесь https://github.com/warrick-eosny/jumper/pull/1/jumper
Дайте мне знать, если вам нужна дополнительная помощь по слиянию.
мм ... казалось, что это должно сработать, но я объединил ваш запрос на перенос и попробовал его, но все равно столкнулся с той же проблемой.