如何使用原生ES6承诺的Typescript

我是一个完整的手稿初学者,我想知道是否有可能在Typescript中使用ES6的承诺,以及为了让他们工作,我需要做些什么。 我正在运行节点0.11.14,并在编译期间出现错误“无法find名称”Promise“”

目前的lib.d.ts在它没有定义的承诺,所以你需要一个额外的定义文件,这就是为什么你得到编译错误。

例如,你可以使用(像@elclanrs所说的)使用es6-promise软件包和来自DefinitelyTyped的定义文件: es6-promise definition

你可以像这样使用它:

 var p = new Promise<string>((resolve, reject) => { resolve('a string'); }); 

编辑你可以在没有定义的情况下使用它(当使用TypeScript编译器时) – 注意你仍然需要Promise在运行时存在(所以它在旧的浏览器中不起作用:))添加/编辑以下内容到你的tsconfig.json

 "compilerOptions": { "target": "ES6" } 

编辑2当TypeScript 2.0出来时,情况会有所改变(虽然上面仍然有效),但定义文件可以像下面这样用npm直接安装:

npm install --save @types/es6-promise – source

edit3用更多的信息更新答案使用types。

创build一个只有{ }package.json文件作为内容(如果您还没有package.json,请调用npm install --save @types/es6-promisetsc --init 。第一个npm install命令将会改变你的package.json以包含es6-promise作为依赖项,tsc –init会为你创build一个tsconfig.json文件。

您现在可以在您的打字稿文件var x: Promise<any>;使用promise var x: Promise<any>; 。 执行tsc -p . 编译你的项目。 你应该没有错误。

select#1

使用targetlib编译器选项直接编译到es5而不需要安装es6-shim 。 (使用TypeScript 2.1.4testing)。 在lib节中,使用es2016es2015.promise

 // tsconfig.json { "compilerOptions": { "target": "es5", "lib": [ "es2015.promise", "dom" ] }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] } 

select#2

使用NPM从types组织 安装 es6-shim

 npm install @types/es6-shim --save-dev 

select#3

在TypeScript 2.0之前,使用es6-shim从DefinitelyTyped全局安装es6-shim

 npm install typings --global --save-dev typings install dt~es6-shim --global --save-dev 

typings选项使用npm在全球安装typings ,然后使用typings来安装垫片。 dt~前缀表示从DefinitelyTyped下载垫片。 – --global选项意味着垫片的types将在整个项目中可用。

也可以看看

https://github.com/Microsoft/TypeScript/issues/7788 – 找不到名字“Promise”&找不到名字'require'

如果您使用node.js 0.12或更高版本/ typescript 1.4或更高版本,只需添加如下编译器选项:

 tsc a.ts --target es6 --module commonjs 

更多信息: https : //github.com/Microsoft/TypeScript/wiki/Compiler-Options

如果你使用tsconfig.json ,那么像这样:

 { "compilerOptions": { "module": "commonjs", "target": "es6" } } 

更多信息: https : //github.com/Microsoft/TypeScript/wiki/tsconfig.json

这是最近的做法,上面的答案已经过时了:

typings install --global es6-promise

从TypeScript 2.0开始,你可以通过在你的tsconfig.json包含以下内容来包含本地promise的tsconfig.json

 "compilerOptions": { "lib": ["es5", "es2015.promise"] } 

这将包括TypeScript带来的承诺声明,而不必将目标设置为ES6。

在Visual Studio 2015 + Node.js工具1.2中使用本机ES6 Promise with Typescript

由于ES6 Promise是本地的,因此不需要安装npm。

Node.js项目 – >属性 – > Typescript生成选项卡ECMAScript版本= ECMAScript6

 import http = require('http'); import fs = require('fs'); function findFolderAsync(directory : string): Promise<string> { let p = new Promise<string>(function (resolve, reject) { fs.stat(directory, function (err, stats) { //Check if error defined and the error code is "not exists" if (err && err.code === "ENOENT") { reject("Directory does not exist"); } else { resolve("Directory exists"); } }); }); return p; } findFolderAsync("myFolder").then( function (msg : string) { console.log("Promise resolved as " + msg); }, function (msg : string) { console.log("Promise rejected as " + msg); } ); 

"target": "es5"如果使用"target": "es5"和TypeScript 2.0以下的版本:

 typings install es6-promise --save --global --source dt 

B.如果使用"target": "es5"和TypeScript版本2.0或更高:

 "compilerOptions": { "lib": ["es5", "es2015.promise"] } 

C.如果使用"target": "es6" ,则不需要做任何事情。

如果你有一个angular色2的CLI项目,你可以这样做: npm install --save @types/es6-promise ,你很好。 这是一个相对较新的变化( 截至2016年10月1日 ),并且是添加types推荐方式

但请确保您的tsconfig.json有:

 compilerOptions: { ...... "typeRoots": [ "../node_modules/@types" // here is the recommended place to add types now.. ] } 

我必须将@types/core-js降级到9.36,才能使用我的tsconfig中设置的"target": "es5"

"@types/core-js": "0.9.36",

对我来说,我只是做了

 import { promise } from 'protractor'