在Angular 2服务中导入自定义声明文件时出现“错误:调试失败。错误表达式:输出生成失败”

时间:2017-09-13 21:42:16

标签: angular typescript typescript-typings

我有一个旧的,令人讨厌的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,无法理解这是否是预期的行为。我的预感是,它不是,这是一个错误,但我真的不知道......

1 个答案:

答案 0 :(得分:1)

好吧,这看起来很愚蠢,但我所要做的就是从文件名中删除字母“d”。

所以,而不是这样:

//actual filename: oldstuff.d.ts
import './oldstuff.d';

我有这个:

//actual filename: oldstuff.ts
import './oldstuff'

现在它按预期构建并在运行时工作。我不太了解 Typescript,无法理解这是否是预期的行为。