[typescript] 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){
}

이렇게하면 인터페이스를 내보내고 가져올 필요가 없습니다.


답변