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 回答
这是适当的声明:
这是整个mock-data.d.ts这里的MockData是我的mock-data.js中导出的标识符 .
这是从https://www.typescriptlang.org/docs/handbook/modules.html设计的 - 不幸的是,提示隐藏在"UMD modules"部分中,因为在其他示例中存在"declare"在我的情况下不需要的东西 .