Answers:
当前的lib.d.ts没有定义promise,因此您需要一个额外的定义文件,这就是为什么您遇到编译错误的原因。
例如,您可以使用es6-promise包(与@elclanrs一样)与DefinitelyTyped中的定义文件一起使用:es6-promise definition
然后可以像这样使用它:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
编辑定位ES6时,可以在不带定义的情况下使用它(使用TypeScript编译器)-请注意,您仍然需要Promise在课程运行时中存在(因此它在旧的浏览器中不起作用:))将以下内容添加/编辑到您的tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
编辑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 .
以编译您的项目。您应该没有错误。
--save-dev
应该使用标志而不是--save
,因为该库仅在编译时使用。
使用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"
]
}
npm install @types/es6-shim --save-dev
打字稿2.0之前,使用分型安装es6-shim
从全球DefinitelyTyped。
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
该typings
选件用于全局npm
安装typings
,然后用于typings
安装垫片。该dt~
前缀是指从DefinitelyTyped下载垫片。该--global
选项意味着在整个项目中都可以使用垫片的类型。
https://github.com/Microsoft/TypeScript/issues/7788-找不到名称'Promise'&找不到名称'require'
es2016
除非您的目标支持ES2016,否则包含一个好主意。有许多浏览器支持promise,但ES2016中不支持所有功能。用于es2015.promise
仅包含promise的类型,而无需拉入ES2016中所有内容的类型。
从TypeScript 2.0开始,您可以通过在您的脚本中包含以下内容来为本地Promise键入内容 tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
这将包括TypeScript随附的promise声明,而不必将目标设置为ES6。
如果您使用的是node.js 0.12或更高版本/打字稿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
无需npm安装,因为ES6 Promises是本机的。
Node.js项目 ->属性-> Typescript Build选项卡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);
}
);
A.如果使用"target": "es5"
低于2.0的TypeScript版本:
typings install es6-promise --save --global --source dt
B.如果使用"target": "es5"
TypeScript 2.0或更高版本:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C.如果使用"target": "es6"
,则无需执行任何操作。
"target": "es6"
TypeScript 2.1.1,但仍在使用Cannot find name 'Promise'
。
es6-promise