dch*_*ang 121 javascript typescript es6-promise
我是Typescript的完全初学者,我想知道是否可以在Typescript中使用ES6承诺以及我必须做些什么才能让它们起作用.我正在运行节点0.11.14并在编译期间收到错误"无法找到名称'承诺'"
Dic*_*ink 126
当前的lib.d.ts中没有定义的promise,所以你需要一个额外的定义文件,这就是你得到编译错误的原因.
您可以使用(例如@elclanrs说)将es6-promise包与DefinitelyTyped中的定义文件一起使用:es6-promise definition
然后你可以像这样使用它:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
Run Code Online (Sandbox Code Playgroud)
编辑你可以在没有定义的情况下使用它来定位ES6(使用TypeScript编译器) - 注意你仍然需要Promise存在于运行时的课程中(所以它在旧的浏览器中不起作用:))添加/编辑以下内容到你的tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
Run Code Online (Sandbox Code Playgroud)
编辑2 当TypeScript 2.0出现时,事情会发生一些变化(尽管上面仍然有效),但定义文件可以直接用npm安装,如下所示:
npm install --save @types/es6-promise
- 来源
edit3 使用更多信息更新答案以使用类型.
创建一个package.json
仅{ }
作为内容的文件(如果你还没有package.json.调用npm install --save @types/es6-promise
和tsc --init
.第一个npm install命令将改变你package.json
的es6-promise作为依赖.tsc --init将创建一个tsconfig.json
文件为了你.
您现在可以在打字稿文件中使用promise var x: Promise<any>;
.执行tsc -p .
以编译您的项目.你应该没有错误.
Sha*_*tin 48
使用target
和lib
编译器选项直接编译,es5
无需安装es6-shim
.(使用TypeScript测试2.1.4
).在lib部分中,使用es2016
或es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Run Code Online (Sandbox Code Playgroud)
npm install @types/es6-shim --save-dev
Run Code Online (Sandbox Code Playgroud)
在TypeScript 2.0之前,使用typingses6-shim
从DefinitelyTyped全局安装.
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
Run Code Online (Sandbox Code Playgroud)
该typings
选项用于全局npm
安装typings
,然后用于typings
安装垫片.该dt~
前缀是指从DefinitelyTyped下载垫片.该--global
选项意味着垫片的类型将在整个项目中可用.
https://github.com/Microsoft/TypeScript/issues/7788 - 找不到名字'Promise'并且找不到名字'require'
pal*_*ind 23
从TypeScript 2.0开始,您可以通过在您的内容中包含以下内容来包含本机承诺的输入 tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Run Code Online (Sandbox Code Playgroud)
这将包括TypeScript附带的promise声明,而不必将目标设置为ES6.
Pla*_*Yao 13
如果您使用node.js 0.12或更高版本/ typescript 1.4或更高版本,只需添加编译器选项,如:
tsc a.ts --target es6 --module commonjs
Run Code Online (Sandbox Code Playgroud)
更多信息:https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
如果你使用tsconfig.json
,那么像这样:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息:https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
Nic*_*ens 12
这是最近这样做的方法,上面的答案已经过时了:
typings install --global es6-promise
A.如果使用"target": "es5"
和TypeScript版本低于2.0:
typings install es6-promise --save --global --source dt
Run Code Online (Sandbox Code Playgroud)
B.如果使用"target": "es5"
和TypeScript版本2.0或更高版本:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Run Code Online (Sandbox Code Playgroud)
C.如果使用"target": "es6"
,则无需做任何事情.
由于ES6 Promises是原生的,因此无需安装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);
}
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
122278 次 |
最近记录: |