2017-02-17 215 views
0

https://github.com/mgumerov/angular“文件是不是一个模块”关于JS模块声明

请看看SRC /模拟数据/模拟data.js - 这是大,但是很简单。

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

我选择使用它在我的TS模块的src /应用/表view.ts:

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

但TSC给了我一个错误消息,因为在隐含导入JS模块结果“任何'对象,除非模块具有方便的TS类型声明。而且,正如Angular 2 quickstart所建议的那样,“隐含的任何”都被视为错误。

我最初的冲动是使用require()来导入模块,而不是像某些源代码提出的那样。但是,这导致错误“无法找到名称:要求”。

好吧,让我们提供一个声明:SRC /模拟数据/模拟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模块的正确解释?一个没有类,没有接口,只有一个对象的模块?

+0

在这种情况下,“消耗”是什么意思? – evolutionxbox

+0

嗯,我试图从模块内部导入一个对象,然后从该对象的属性中提取一些数据片段到一个新创建的类型化对象数组中。毫无疑问,我可以用其他方式完成它,比如阅读JSON,但是我想知道为什么我目前的方法不起作用。 –

回答

0

这里是正确的声明:

export const MockData: any; 

这就是全部的模拟data.d.ts 的MockData这里是接下来的出口在我的模拟data.js作出标识

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