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

时间:2016-01-14 20:53:55

标签: typescript requirejs swagger-editor

以下是该方案:

使用Swagger,我为我的REST服务创建了一个api规范。然后我生成angular typescript样板文件,用于从Swagger Editor工具调用我的服务。

当我生成样板文件时,有多个文件都使用typescript内部命名空间,而我的项目的其余部分是AMD,因此我试图将此编译视为第三方非AMD库。当我编译打字稿文件时,我发出一个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

  

错误TS2307:找不到模块' myApi'从试图的文件   导入它。

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

如何使Typescript看到此模块(或以其他方式禁止显示此错误消息)?

1 个答案:

答案 0 :(得分:0)

我要使用的解决方案是生成我的文件,然后手动修改它们作为外部模块而不是内部模块。另一种方法是修改swagger codegen源以生成我的文件作为外部文件,但现在手动方式必须这样做。