网站搜索

typescript - 错误 TS2307:找不到模块(但在运行 js 时可以找到)


情景如下:

使用 Swagger,我为我的 REST 服务创建了一个 API 规范。然后,我使用 Swagger Editor 工具生成调用我的服务的 Angular TypeScript 模板文件。

当我生成样板文件时,有多个文件都使用 TypeScript 内部命名空间,而我项目的其余部分是 AMD,因此我正试图将此编译视为第三方非 AMD 库。当我编译 TypeScript 文件时,我将它们输出为单个 JavaScript 文件。

我的项目使用 RequireJS,我已经像这样用 RequireJS 注册了我的单个 JavaScript 文件:

requirejs.config({
    paths: 'myApi': 'my/path/to/myApi', // There is no ts file with this name but there is a js once compiled
    shim: {
        'myApi': {
            init: () => {
                return this.API;  // The top level object from the boilerplate is API
            },
            exports: 'myApi'
        }
    }
}

})

在另一个文件中,我有如下代码:

import myApi = require('myApi');
console.log(myApi);

在我上面提到的同一个文件中:

import angular = require('angular');

它以类似于 myApi 的方式在 RequireJS 中注册。TypeScript 找不到 angular 没有问题。

当我编译我的项目时,我得到 TypeScript

错误 TS2307:无法从尝试导入它的文件中找到模块 'myApi'。

当我运行实际项目时,正确的 myApi 对象会被记录到控制台。

我如何才能让 Typescript 识别这个模块(或以其他方式抑制此错误消息)?

答案#1

我选择的解决方案是生成我的文件,然后手动修改它们,使其成为外部模块而不是内部模块。另一种方法是修改 swagger codegen 的源码,使其生成的文件为外部模块,但目前只能采用手动的方法。