TypeScript导出导入的界面

Gáb*_*mre 72 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
Run Code Online (Sandbox Code Playgroud)

用法:

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 
Run Code Online (Sandbox Code Playgroud)

还有更好的解决方案吗?我不想将所有内容都放在一个文件中,但我想要import一个文件.

C S*_*ver 134

传统模块有导出导入语法,现代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';

// 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';
Run Code Online (Sandbox Code Playgroud)

  • 但是,在命名空间中使用这种重新导出方式是非法的 (3认同)
  • 与您的旧示例类似,在TS中是否存在用于导出和导入接口的单线?还是只是导入然后重新使用同一行,但将其更改为导出的情况(例如)。从'./message-types'导入{IMessage};然后在下一行从'./message-types'导出{IMessage};` (2认同)
  • 为什么是@e-cloud?你能举一些例子/背景吗? (2认同)

Gáb*_*mre 50

除了来自#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)
Run Code Online (Sandbox Code Playgroud)


Dea*_*tin 5

特别是在我的例子中,我必须“声明”接口而不是导出它。

declare interface IFluxStoreSyncOptions{
  namespacedKey: string;
}
Run Code Online (Sandbox Code Playgroud)

为了将接口用作另一个文件中的类型,如下所示:

export function FluxStoreSync(options: IFluxStoreSyncOptions){
}
Run Code Online (Sandbox Code Playgroud)

这样您就不必导出和导入界面。