该企业有一个名为legacy.js的旧JS文件
目标是在正在使用
编写的新模块中使用该文件
打字稿。我们将其称为“跳转”模块。
然后另一个开发人员将从git中提取此模块,并在名为“ jumperdemo”的项目中使用该模块,并出现以下错误:
无法编译。
../ jumper / dist / index.js 找不到模块:无法解析“ {基本路径} \ 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模块中的人,因此我显然缺少一些重要的东西。
答案 0 :(得分:1)
首先更改您的.my_text
文件。
.my_text
为*.d.ts
模块声明。declare module 'Legacy'
以匹配./relative
导出样式。export default class...
,使其路径与旧模块的路径匹配。然后更改您的legacy.js
文件以导入并实例化旧类的默认导出。
结果看起来像这样(省略了一些代码)。
src/legacy.d.ts
TypeScript文档中有an article个关于从JavaScript迁移的信息。有太多的方法来详细说明所有这些方法。这里有两种可能适合您的情况:使用src/index.ts
来使用没有类型的本地JavaScript;或者,将// src/index.ts
import legacy from './legacy';
let oldObj = new legacy();
// src/legacy.js (unchanged)
export default class OldOldClass {
runSuperOldLogic(someInput) {
console.log('really old logic run ' + someInput);
}
}
// src/legacy.d.ts
export default class OldOldClass {
runSuperOldLogic(someInput: string): any;
}
更改为allowJs
并将类型与实现内联。
我分叉了您极好的最小样本回购,并在这里https://github.com/warrick-eosny/jumper/pull/1/jumper对其进行了公关