How to use Typescript with native ES6 Promises
The current lib.d.ts doesn't have promises in it defined so you need a extra definition file for it that is why you are getting compilation errors.
You could for example use (like @elclanrs says) use the es6-promise package with the definition file from DefinitelyTyped: es6-promise definition
You can then use it like this:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
edit You can use it without a definition when targeting ES6 (with the TypeScript compiler) - Note you still require the Promise to exists in the runtime ofcourse (so it won't work in old browsers :))
Add/Edit the following to your tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
edit 2 When TypeScript 2.0 will come out things will change a bit (though above still works) but definition files can be installed directly with npm like below:
npm install --save @types/es6-promise
- source
edit3 Updating answer with more info for using the types.
Create a package.json
file with only { }
as the content (if you don't have a package.json already.
Call npm install --save @types/es6-promise
and tsc --init
. The first npm install command will change your package.json
to include the es6-promise as a dependency. tsc --init will create a tsconfig.json
file for you.
You can now use the promise in your typescript file var x: Promise<any>;
.
Execute tsc -p .
to compile your project. You should have no errors.
Alternative #1
Use the target
and lib
compiler options to compile directly to es5
without needing to install the es6-shim
. (Tested with TypeScript 2.1.4
).
In the lib section, use either es2016
or es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Alternative #2
Use NPM to install the es6-shim
from the types organization.
npm install @types/es6-shim --save-dev
Alternative #3
Before TypeScript 2.0, use typings to install the es6-shim
globally from DefinitelyTyped.
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
The typings
option uses npm
to install typings
globally and then uses typings
to install the shim. The dt~
prefix means to download the shim from DefinitelyTyped. The --global
option means that the shim's types will be available throughout the project.
See also
https://github.com/Microsoft/TypeScript/issues/7788 - Cannot find name 'Promise' & Cannot find name 'require'