TypeScript导出导入接口



我使用AMD模块,我想在一个文件后面隐藏一个复杂的接口,该接口可以加载其他几个文件,并选择暴露什么以及如何暴露。它工作,我使用这个解决方案,但感觉有点丑,主要是与接口。

import Types = require('./message-types');
import MessageBaseImport = require('./message-base');
export interface IMessage extends Types.IMessage {} // This is an interface
export var MessageBase = MessageBaseImport; // This is a class

用法:

import Message = require('message');
import { * } as Message from 'message'; // Or with ES6 style
var mb = new Message.MessageBase(); // Using the class
var msg: Message.IMessage = null; // Using the interface 

有没有更好的解决方案?我不想把所有东西都放到一个文件里,但我想把import放到一个文件里。

有一个用于遗留模块的导出导入语法,以及一个用于现代ES6模块的标准导出格式:

// export the default export of a legacy (`export =`) module
export import MessageBase = require('./message-base');
// export the default export of a modern (`export default`) module
export { default as MessageBase } from './message-base';
// when '--isolatedModules' flag is provided it requires using 'export type'.
export type { default as MessageBase } from './message-base';
// export an interface from a legacy module
import Types = require('./message-types');
export type IMessage = Types.IMessage;
// export an interface from a modern module
export { IMessage } from './message-types';

除了#c-snover的答案,还有更多的例子。你可以把它们放在一起。

import 'jquery';                        // import a module without any import bindings
import $ from 'jquery';                 // import the default export of a module
import { $ } from 'jquery';             // import a named export of a module
import { $ as jQuery } from 'jquery';   // import a named export to a different name
import * as crypto from 'crypto';       // import an entire module instance object
export var x = 42;                      // export a named variable
export function foo() {};               // export a named function
export default 42;                      // export the default export
export default function foo() {};       // export the default export as a function
export { encrypt };                     // export an existing variable
export { decrypt as dec };              // export a variable as a new name
export { encrypt as en } from 'crypto'; // export an export from another module
export * from 'crypto';                 // export all exports from another module
                                        // (except the default export)

特别是在我的情况下,我必须'声明'接口,而不是导出它。

declare interface IFluxStoreSyncOptions{
  namespacedKey: string;
}
为了在另一个文件中使用接口作为类型,如下所示:
export function FluxStoreSync(options: IFluxStoreSyncOptions){
}

这样你就不需要导出和导入接口了

最新更新