23.06.2015 Views

TypeScript Language Specification v1.5

TypeScript Language Specification v1.5

TypeScript Language Specification v1.5

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>TypeScript</strong> modules provide a mechanism for succinctly expressing the module pattern. In <strong>TypeScript</strong>,<br />

programmers can combine the module pattern with the class pattern by nesting modules and classes<br />

within an outer module.<br />

The following example shows the definition and use of a simple module.<br />

module M {<br />

var s = "hello";<br />

export function f() {<br />

return s;<br />

}<br />

}<br />

M.f();<br />

M.s; // Error, s is not exported<br />

In this example, variable 's' is a private feature of the module, but function 'f' is exported from the module<br />

and accessible to code outside of the module. If we were to describe the effect of module 'M' in terms of<br />

interfaces and variables, we would write<br />

interface M {<br />

f(): string;<br />

}<br />

var M: M;<br />

The interface 'M' summarizes the externally visible behavior of module 'M'. In this example, we can use the<br />

same name for the interface as for the initialized variable because in <strong>TypeScript</strong> type names and variable<br />

names do not conflict: each lexical scope contains a variable declaration space and type declaration space<br />

(see section 2.3 for more details).<br />

Module 'M' is an example of an internal module, because it is nested within the global module (see<br />

section 10 for more details). The <strong>TypeScript</strong> compiler emits the following JavaScript code for this module.<br />

var M;<br />

(function(M) {<br />

var s = "hello";<br />

function f() {<br />

return s;<br />

}<br />

M.f = f;<br />

})(M || (M = {}));<br />

In this case, the compiler assumes that the module object resides in global variable 'M', which may or may<br />

not have been initialized to the desired module object.<br />

15

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!