js模块声明

时间:2017-02-17 17:15:48

标签: typescript

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),当然它非常简单,因为我只声明一个无类型的对象。也许我甚至不这样做,但不是整个故事!问题是,TSC现在说TS2306:文件... mock-data.d.ts不是模块!即使我试图用之前提到的文件替换文件(来自DefinitelyTyped),消息也保持不变。发生了什么事?

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

1 个答案:

答案 0 :(得分:0)

这是适当的声明:

export const MockData: any;

这就是整个模拟数据 这里的MockData是在我的mock-data.js

中进行导出的标识符

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