将旧版JS包含到Typescript模块中

时间:2019-01-01 22:27:38

标签: typescript

该企业有一个名为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模块中的人,因此我显然缺少一些重要的东西。

1 个答案:

答案 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对其进行了公关