首页 文章

js模块声明中的“文件不是模块”

提问于
浏览
0

https://github.com/mgumerov/angular

请看一下src / mock-data / mock-data.js - 它很大但非常简单 .

System.register([], function (exports) {
  mockdata = {......};
  exports("MockData", mockdata);
});

我选择在我的TS模块src / app / table-view.ts中使用它:

import { MockData } from 'mockdata/mock-data';

但是TSC给了我一个错误信息,因为导入一个JS模块导致隐含的'any'对象,除非该模块有一个方便的TS类型声明 . 并且,正如Angular 2快速入门所暗示的那样,“隐含任意”被视为错误 .

我最初的冲动是使用require()代替导入模块,正如一些消息来源所建议的那样 . 但是,这会导致错误“无法找到名称:要求” .

好吧,让我们提供一个声明:src / mock-data / mock-data.d.ts

declare module 'MockData' {
  var mockdata: any;
  export = mockdata;
}

它看起来非常像其他类似的声明(https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/adal/index.d.ts),当然除了's very simple because I only declare a single untyped object. And maybe I even don' t这样做,但这不是整个故事!问题是,TSC现在说TS2306:文件... mock-data.d.ts不是模块!即使我试图用之前提到的文件替换文件(来自DefinitelyTyped),消息也保持不变 . 到底是怎么回事?

我应该在哪里找到如何在TS中使用JS模块的正确解释?没有类,没有接口,只有一个对象的模块?

1 回答

  • 0

    这是适当的声明:

    export const MockData: any;
    

    这是整个mock-data.d.ts这里的MockData是我的mock-data.js中导出的标识符 .

    这是从https://www.typescriptlang.org/docs/handbook/modules.html设计的 - 不幸的是,提示隐藏在"UMD modules"部分中,因为在其他示例中存在"declare"在我的情况下不需要的东西 .

相关问题