diff --git a/gulpfile.js b/gulpfile.js
index 49004fabd2..34b9b67cf9 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -238,6 +238,7 @@ gulp.task('transpile', function(){
function tsCompile(options, cacheName){
return gulp.src([
+ 'typings/main.d.ts',
'ionic/**/*.ts',
'!ionic/**/*.d.ts',
'!ionic/components/*/test/**/*',
diff --git a/ionic/components/button/test/button.spec.ts b/ionic/components/button/test/button.spec.ts
index 0d284cca96..2a84e7f6cb 100644
--- a/ionic/components/button/test/button.spec.ts
+++ b/ionic/components/button/test/button.spec.ts
@@ -1,5 +1,3 @@
-///
-
import {Button, Config} from '../../../../ionic/ionic';
export function run() {
diff --git a/ionic/components/input/test/text-input.spec.ts b/ionic/components/input/test/text-input.spec.ts
index da377f754a..54418e9014 100644
--- a/ionic/components/input/test/text-input.spec.ts
+++ b/ionic/components/input/test/text-input.spec.ts
@@ -1,5 +1,3 @@
-///
-
import {TextInput} from '../../../../ionic/ionic';
export function run() {
diff --git a/ionic/components/nav/test/nav-controller.spec.ts b/ionic/components/nav/test/nav-controller.spec.ts
index f9973768c5..651b4e0264 100644
--- a/ionic/components/nav/test/nav-controller.spec.ts
+++ b/ionic/components/nav/test/nav-controller.spec.ts
@@ -1,5 +1,3 @@
-///
-
import {NavController, Config, ViewController} from '../../../../ionic/ionic';
export function run() {
diff --git a/ionic/config/test/config.spec.ts b/ionic/config/test/config.spec.ts
index 4b4af5105d..1f6acda7ae 100644
--- a/ionic/config/test/config.spec.ts
+++ b/ionic/config/test/config.spec.ts
@@ -1,5 +1,3 @@
-///
-
import {Config, Platform, ionicProviders} from '../../../ionic/ionic';
export function run() {
diff --git a/ionic/platform/test/platform.spec.ts b/ionic/platform/test/platform.spec.ts
index a5e664a2d8..ad748cf213 100644
--- a/ionic/platform/test/platform.spec.ts
+++ b/ionic/platform/test/platform.spec.ts
@@ -1,5 +1,3 @@
-///
-
import {Platform} from '../../../ionic/ionic';
export function run() {
diff --git a/ionic/util/test/util.spec.ts b/ionic/util/test/util.spec.ts
index efd4423194..16fc339a16 100644
--- a/ionic/util/test/util.spec.ts
+++ b/ionic/util/test/util.spec.ts
@@ -1,5 +1,3 @@
-///
-
import * as util from '../../../ionic/util';
export function run() {
diff --git a/tsconfig.json b/tsconfig.json
index fc882ee1ca..b29da5f293 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -7,9 +7,10 @@
"declaration": true,
"outDir": "dist"
},
+ "include": [
+ "ionic/ionic.ts",
+ "typings/main.d.ts"
+ ],
"compileOnSave" : false,
- "buildOnSave": false,
- "exclude": [
- "node_modules"
- ]
+ "buildOnSave": false
}
diff --git a/typings.json b/typings.json
new file mode 100644
index 0000000000..7ebdd1aec9
--- /dev/null
+++ b/typings.json
@@ -0,0 +1,9 @@
+{
+ "name": "ionic2",
+ "dependencies": {},
+ "devDependencies": {},
+ "ambientDevDependencies": {
+ "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2",
+ "jasmine": "github:DefinitelyTyped/DefinitelyTyped/jasmine/jasmine.d.ts#dd638012d63e069f2c99d06ef4dcc9616a943ee4"
+ }
+}
diff --git a/typings/browser.d.ts b/typings/browser.d.ts
new file mode 100644
index 0000000000..5d213f7d89
--- /dev/null
+++ b/typings/browser.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/typings/browser/ambient/es6-shim/es6-shim.d.ts b/typings/browser/ambient/es6-shim/es6-shim.d.ts
new file mode 100644
index 0000000000..a8f2ba2d62
--- /dev/null
+++ b/typings/browser/ambient/es6-shim/es6-shim.d.ts
@@ -0,0 +1,670 @@
+// Compiled using typings@0.6.8
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/6697d6f7dadbf5773cb40ecda35a76027e0783b2/es6-shim/es6-shim.d.ts
+// Type definitions for es6-shim v0.31.2
+// Project: https://github.com/paulmillr/es6-shim
+// Definitions by: Ron Buckton
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare type PropertyKey = string | number | symbol;
+
+interface IteratorResult {
+ done: boolean;
+ value?: T;
+}
+
+interface IterableShim {
+ /**
+ * Shim for an ES6 iterable. Not intended for direct use by user code.
+ */
+ "_es6-shim iterator_"(): Iterator;
+}
+
+interface Iterator {
+ next(value?: any): IteratorResult;
+ return?(value?: any): IteratorResult;
+ throw?(e?: any): IteratorResult;
+}
+
+interface IterableIteratorShim extends IterableShim, Iterator {
+ /**
+ * Shim for an ES6 iterable iterator. Not intended for direct use by user code.
+ */
+ "_es6-shim iterator_"(): IterableIteratorShim;
+}
+
+interface StringConstructor {
+ /**
+ * Return the String value whose elements are, in order, the elements in the List elements.
+ * If length is 0, the empty string is returned.
+ */
+ fromCodePoint(...codePoints: number[]): string;
+
+ /**
+ * String.raw is intended for use as a tag function of a Tagged Template String. When called
+ * as such the first argument will be a well formed template call site object and the rest
+ * parameter will contain the substitution values.
+ * @param template A well-formed template string call site representation.
+ * @param substitutions A set of substitution values.
+ */
+ raw(template: TemplateStringsArray, ...substitutions: any[]): string;
+}
+
+interface String {
+ /**
+ * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point
+ * value of the UTF-16 encoded code point starting at the string element at position pos in
+ * the String resulting from converting this object to a String.
+ * If there is no element at that position, the result is undefined.
+ * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.
+ */
+ codePointAt(pos: number): number;
+
+ /**
+ * Returns true if searchString appears as a substring of the result of converting this
+ * object to a String, at one or more positions that are
+ * greater than or equal to position; otherwise, returns false.
+ * @param searchString search string
+ * @param position If position is undefined, 0 is assumed, so as to search all of the String.
+ */
+ includes(searchString: string, position?: number): boolean;
+
+ /**
+ * Returns true if the sequence of elements of searchString converted to a String is the
+ * same as the corresponding elements of this object (converted to a String) starting at
+ * endPosition – length(this). Otherwise returns false.
+ */
+ endsWith(searchString: string, endPosition?: number): boolean;
+
+ /**
+ * Returns a String value that is made from count copies appended together. If count is 0,
+ * T is the empty String is returned.
+ * @param count number of copies to append
+ */
+ repeat(count: number): string;
+
+ /**
+ * Returns true if the sequence of elements of searchString converted to a String is the
+ * same as the corresponding elements of this object (converted to a String) starting at
+ * position. Otherwise returns false.
+ */
+ startsWith(searchString: string, position?: number): boolean;
+
+ /**
+ * Returns an HTML anchor element and sets the name attribute to the text value
+ * @param name
+ */
+ anchor(name: string): string;
+
+ /** Returns a HTML element */
+ big(): string;
+
+ /** Returns a