diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc7a69cf3e3..e867ac9c646 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
## [`master`](https://github.com/elastic/eui/tree/master)
-No public interface changes since `5.5.1`.
+- Convert `EuiIcon` to TypeScript ([#1355](https://github.com/elastic/eui/pull/1355))
## [`5.5.1`](https://github.com/elastic/eui/tree/v5.5.1)
diff --git a/package.json b/package.json
index 331fa0eccb6..c028c75ab66 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
"lint-es-fix": "eslint --fix --cache --ignore-pattern \"**/*.snap.js\" \"src/**/*.js\" \"src-docs/**/*.js\"",
"lint-sass": "sass-lint -v --max-warnings 0",
"lint-sass-fix": "sass-lint-auto-fix -c ./.sass-lint-fix.yml",
- "lint-ts": "tslint -c ./tslint.yaml -p ./tsconfig.json && tsc -p ./tsconfig.json --noEmit",
+ "lint-ts": "tsc -p ./tsconfig.json --noEmit && tslint -c ./tslint.yaml -p ./tsconfig.json",
"lint-ts-fix": "tslint -c ./tslint.yaml -p ./tsconfig.json --fix",
"lint-framer": "tslint -c ./tslint.yaml -p ./src-framer/tsconfig.json",
"lint-framer-fix": "tslint -c ./tslint.yaml -p ./src-framer/tsconfig.json --fix",
diff --git a/src/components/badge/index.d.ts b/src/components/badge/index.d.ts
index 7f47aa83c4a..fad1e03fab8 100644
--- a/src/components/badge/index.d.ts
+++ b/src/components/badge/index.d.ts
@@ -1,4 +1,4 @@
-///
+import { IconType } from '../icon'
///
import { HTMLAttributes, MouseEventHandler, SFC, ReactNode } from 'react';
diff --git a/src/components/button/index.d.ts b/src/components/button/index.d.ts
index d17bf8f0454..36a6879e35e 100644
--- a/src/components/button/index.d.ts
+++ b/src/components/button/index.d.ts
@@ -1,5 +1,5 @@
import { CommonProps } from '../common';
-///
+import { IconType } from '../icon'
import { SFC, ButtonHTMLAttributes, AnchorHTMLAttributes, MouseEventHandler, HTMLAttributes } from 'react';
diff --git a/src/components/call_out/index.d.ts b/src/components/call_out/index.d.ts
index c9b51b64998..5cc151d8fc8 100644
--- a/src/components/call_out/index.d.ts
+++ b/src/components/call_out/index.d.ts
@@ -1,5 +1,5 @@
import { CommonProps, Omit } from '../common';
-///
+import { IconType } from '../icon'
import { SFC, ReactNode, HTMLAttributes } from 'react';
diff --git a/src/components/common.ts b/src/components/common.ts
index c552fa0d27f..2d6283530ab 100644
--- a/src/components/common.ts
+++ b/src/components/common.ts
@@ -13,3 +13,7 @@ export type RefCallback = (
// utility types:
export type Omit = Pick>;
+
+export function keysOf(obj: T): K[] {
+ return Object.keys(obj) as K[];
+}
diff --git a/src/components/empty_prompt/index.d.ts b/src/components/empty_prompt/index.d.ts
index 34e05663894..076f001ac1f 100644
--- a/src/components/empty_prompt/index.d.ts
+++ b/src/components/empty_prompt/index.d.ts
@@ -1,5 +1,5 @@
import { CommonProps, Omit } from '../common';
-///
+import { IconColor, IconType } from '../icon'
///
import { SFC, ReactNode, HTMLAttributes } from 'react';
diff --git a/src/components/form/field_number/index.d.ts b/src/components/form/field_number/index.d.ts
index 4300b76c292..0f6f313cb2d 100644
--- a/src/components/form/field_number/index.d.ts
+++ b/src/components/form/field_number/index.d.ts
@@ -1,5 +1,5 @@
import { CommonProps } from '../../common';
-///
+import { IconType } from '../../icon'
import { ReactNode, SFC, InputHTMLAttributes } from 'react';
diff --git a/src/components/health/index.d.ts b/src/components/health/index.d.ts
index 0b078eb82be..c2a20d1fb4c 100644
--- a/src/components/health/index.d.ts
+++ b/src/components/health/index.d.ts
@@ -1,4 +1,4 @@
-///
+import { IconColor } from '../icon'
import { SFC, HTMLAttributes } from 'react';
import { CommonProps } from '../common';
diff --git a/src/components/icon/__snapshots__/icon.test.js.snap b/src/components/icon/__snapshots__/icon.test.tsx.snap
similarity index 99%
rename from src/components/icon/__snapshots__/icon.test.js.snap
rename to src/components/icon/__snapshots__/icon.test.tsx.snap
index 06d6cdb6e62..9c6e1aabfcd 100644
--- a/src/components/icon/__snapshots__/icon.test.js.snap
+++ b/src/components/icon/__snapshots__/icon.test.tsx.snap
@@ -24,9 +24,10 @@ exports[`EuiIcon is rendered 1`] = `
`;
-exports[`EuiIcon props size l is rendered 1`] = `
+exports[`EuiIcon props other props are passed through to the icon 1`] = `