如何使用原生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-promise
和tsc --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
使用target
和lib
编译器选项直接编译到es5
而不需要安装es6-shim
。 (使用TypeScript 2.1.4
testing)。 在lib节中,使用es2016
或es2015.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'