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

Rol*_*dus 5 typescript typescript-typings angular

我有一个旧的,令人讨厌的JavaScript文件,里面充满了我需要提供给Angular服务的东西,而我只是想不出办法。对于为此很难找到一个教程,我感到很惊讶。也许我就是这样,以至于我什至都不知道该怎么问...

我已经为其创建了一个声明文件(假设它称为oldstuff.d.ts)。

澄清:这只是一个声明文件。实际的代码位于另一个文件中:oldstuff.js

在我的Angular服务的顶部,我要像这样导入声明文件:

import './oldstuff.d';
Run Code Online (Sandbox Code Playgroud)

我在应用程序的任何地方没有做任何其他尝试来获取包含的声明文件。

这种导入足以使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
Run Code Online (Sandbox Code Playgroud)

我已经搜索了该特定的错误消息,以及有关如何包括声明文件的一般信息,而我干了。

这是我看过的一些东西:

我遇到了合法错误,还是我做错了?

解?

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

因此,代替此:

//actual filename: oldstuff.d.ts
import './oldstuff.d';
Run Code Online (Sandbox Code Playgroud)

我有这个:

//actual filename: oldstuff.ts
import './oldstuff'
Run Code Online (Sandbox Code Playgroud)

现在,它可以按预期在运行时生成并运行。我对Typescript的理解不够充分,无法理解这是否是预期的行为。我的预感不是,这是一个错误,但是我真的不知道...

Rol*_*dus 5

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

所以,而不是这个:

//actual filename: oldstuff.d.ts
import './oldstuff.d';
Run Code Online (Sandbox Code Playgroud)

我有这个:

//actual filename: oldstuff.ts
import './oldstuff'
Run Code Online (Sandbox Code Playgroud)

现在它可以按预期在运行时构建并运行。我对 Typescript 的理解还不够深入,无法理解这是否是预期的行为。