我有一个旧的,令人讨厌的JavaScript文件,里面装满了我需要提供给我的Angular服务的东西,而我却无法弄清楚如何去做。我很惊讶找到这方面的教程有多难。也许我就是这样,我甚至不知道如何提出这个问题......
我为它创建了一个声明文件(假设它叫做oldstuff.d.ts
)。
澄清:这只是一个声明文件。实际代码位于不同的文件中:oldstuff.js
在我的Angular服务的顶部,我正在导入声明文件,如下所示:
import './oldstuff.d';
我在应用程序中没有做任何任何的事情,试图获取声明文件。
这个导入足以让VS Code识别定义,并且所有intellisense都按照我的预期工作。
事实上,我甚至可以使用Angular CLI来构建项目,它似乎构建正常。
但是,只要我尝试将此服务注入应用程序中其他位置的构造函数中,构建就会失败,并显示以下错误:
ERROR in ./src/app/oldstuff.d.ts
Module build failed: Error: Debug Failure. False expression: Output generation failed
at Object.assert (c:\Projects\Angular\MyApp\node_modules\typescript\lib\typescript.js:3329:23)
at Object.transpileModule (c:\Projects\Angular\MyApp\node_modules\typescript\lib\typescript.js:80449:18)
at TypeScriptFileRefactor.transpile (c:\Projects\Angular\MyApp\node_modules\@ngtools\webpack\src\refactor.js:166:27)
at Promise.resolve.then.then.then.then (c:\Projects\Angular\MyApp\node_modules\@ngtools\webpack\src\loader.js:414:37)
@ ./src/app/my-app.module.ts 23:0-34
@ ./src/main.ts
@ multi ./src/main.ts
我已经用Google搜索了特定的错误消息,以及有关如何包含声明文件的一般信息,而且我已经干了。
以下是我看过的一些事情:
我是一个合法的错误,还是我完全错了?
嗯,这看起来真的很蠢,但我所要做的就是从文件名中删除字母'd'。
所以,而不是:
//actual filename: oldstuff.d.ts
import './oldstuff.d';
我有这个:
//actual filename: oldstuff.ts
import './oldstuff'
现在它按预期在运行时构建和工作。我不太了解Typescript,无法理解这是否是预期的行为。我的预感是,它不是,这是一个错误,但我真的不知道......
答案 0 :(得分:1)
好吧,这看起来很愚蠢,但我所要做的就是从文件名中删除字母“d”。
所以,而不是这样:
//actual filename: oldstuff.d.ts
import './oldstuff.d';
我有这个:
//actual filename: oldstuff.ts
import './oldstuff'
现在它按预期构建并在运行时工作。我不太了解 Typescript,无法理解这是否是预期的行为。