我是一个完整的 Typescript 初学者,想知道是否可以在 Typescript 中使用 ES6 Promise,以及我必须做些什么才能让它们工作。我正在运行节点 0.11.14 并且在编译过程中出现错误“找不到名称 'Promise'”
如何在原生 ES6 Promise 中使用 Typescript
当前的 lib.d.ts 中没有定义 promise,因此您需要一个额外的定义文件,这就是为什么会出现编译错误的原因。
例如,您可以使用(如@elclanrs 所说)将 es6-promise 包与来自绝对类型的定义文件一起使用: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
文件为你。
您现在可以在typescript文件中使用Promisevar x: Promise<any>;
。执行tsc -p .
以编译您的项目。你应该没有错误。
替代方案#1
使用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"
]
}
替代方案#2
npm install @types/es6-shim --save-dev
替代方案 #3
在 TypeScript 2.0 之前,使用typings来安装es6-shim
来自绝对类型的全局。
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
该typings
选项用于全局npm
安装typings
,然后用于typings
安装 shim。该dt~
前缀是指从DefinitelyTyped下载垫片。该--global
选项意味着垫片的类型将在整个项目中可用。
也可以看看
https://github.com/Microsoft/TypeScript/issues/7788 - 找不到名称 'Promise' 和找不到名称 'require'
从 TypeScript 2.0 开始,您可以通过在您的 tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
这将包括 TypeScript 附带的Promise声明,而无需将目标设置为 ES6。
如果您使用 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