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

Posted

技术标签:

【中文标题】错误TS2307:找不到模块(但在运行js时可以)【英文标题】:error TS2307: Cannot find module (but it can when running the js) 【发布时间】:2016-04-20 08:45:09 【问题描述】:

这是场景:

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

当我生成样板文件时,有多个文件都使用 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 注册。打字稿没有;找到角度没有问题。

当我编译我的项目时,我得到了打字稿

错误 TS2307:无法从试图从文件中找到模块“myApi” 导入它。

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

我怎样才能让 Typescript 看到这个模块(或者以其他方式隐藏这个错误消息)?

【问题讨论】:

【参考方案1】:

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

【讨论】:

您能详细说明一下吗?我遇到了同样的问题,但我不明白你在做什么。

以上是关于错误TS2307:找不到模块(但在运行js时可以)的主要内容,如果未能解决你的问题,请参考以下文章

Vue常见问题找不到模块“./App.vue”或其相应的类型声明。ts(2307)

TS2307 构建:找不到模块“lodash”

NRWL NX 导入库错误 TS2307:找不到模块“@eduboard/interfaces”

Nativescript ::错误TS2307:找不到模块'image-asset'

打字稿导入文本文件“错误 TS2307:找不到模块”

Angular 2:错误 TS2307:找不到模块“socket.io-client”