如何将 Typescript 与本机 ES6 Promise 一起使用另请参见

2022-08-30 04:50:30

我是Typescript的完全初学者,我想知道是否可以在Typescript中使用ES6承诺,以及我必须做些什么才能使它们正常工作。我正在运行节点 0.11.14,在编译过程中收到错误“找不到名称'Promise'”


答案 1

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

例如,您可以使用(如@elclanrs说的)将es6-promise包与WifistlyTyped:es6-promise定义中的定义文件一起使用

然后,您可以像这样使用它:

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 -

编辑3使用有关使用这些类型的详细信息更新答案。

创建仅作为内容的文件(如果还没有 package.json)。调用和 .第一个 npm 安装命令将更改 ,以包含 es6-promise 作为依赖项。tsc --init 将为您创建一个文件。package.json{ }npm install --save @types/es6-promisetsc --initpackage.jsontsconfig.json

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


答案 2

替代方案 #1

使用 和 编译器选项直接编译到,而无需安装 .(使用 TypeScript 测试)。在 lib 部分中,使用 或 。targetlibes5es6-shim2.1.4es2016es2015.promise

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

备选方案 #2

使用 NPM类型组织安装 。es6-shim

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

备选方案 #3

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

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

该选项用于全局安装,然后用于安装填充程序。前缀表示从 DefinitelyTyped 下载填充程序。该选项意味着填充码的类型将在整个项目中可用。typingsnpmtypingstypingsdt~--global

另请参见

https://github.com/Microsoft/TypeScript/issues/7788 - 找不到名称“Promise”和找不到名称“require”