2015-06-08 29 views
41

Tôi sử dụng các mô-đun AMD và tôi muốn ẩn một giao diện phức tạp phía sau một tệp tải nhiều tệp khác và chọn những gì để hiển thị và cách thức. Nó hoạt động, tôi sử dụng giải pháp này nhưng nó cảm thấy kinda xấu xí, chủ yếu là với các giao diện.Giao diện nhập khẩu xuất khẩu TypeScript

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 

Cách sử dụng:

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 

Bất kỳ giải pháp tốt hơn ra khỏi đó? Tôi không muốn đặt mọi thứ vào một tệp nhưng tôi muốn import một tệp.

Trả lời

67

Có một cú pháp xuất khẩu nhập khẩu đối với các module di sản, và một định dạng tiêu chuẩn xuất khẩu cho module ES6 hiện đại:

// 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'; 
+2

Cảm ơn tất cả các biến thể! TS vừa trở nên đẹp hơn nhiều. –

+0

Tuy nhiên, việc sử dụng lại kiểu này là không hợp lệ trong không gian tên –

+1

Có một lớp lót để xuất và nhập giao diện trong TS tương tự như ví dụ cũ của bạn không? Hoặc là nó chỉ là một trường hợp nhập khẩu và sau đó tái sử dụng cùng một dòng, nhưng thay đổi nó thành một ví dụ xuất khẩu. 'import {IMessage} từ './message-types';' và sau đó trên dòng tiếp theo có 'export {IMessage} từ './message-types';' – mtpultz

29

Một số ví dụ khác ngoài câu trả lời # c-snover từ here. Bạn có thể đặt chúng lại với nhau.

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) 
+0

Cảm ơn. Nhưng tại sao biến thể nhập khẩu cuối cùng tách ra khỏi tất cả các biến thể khác? Chẳng phải nó sẽ ở ngay dưới bốn cái kia sao? – Venryx

+0

Đó là từ trang web được giới thiệu. –

Các vấn đề liên quan