如何使用打字稿的es6-promises?

dcs*_*san 47 typescript es6-promise

我读了这个问题,但很难得到承诺与打字稿一起工作.希望我们能够做出明确的指导.这适用于服务器/节点项目.我实际上正在使用最新的iojs,但将ES5作为输出.

$ tsd query es6-promise --action install --save
$ npm install --save es6-promise


// typescript code:

/// <reference path="../../typings/es6-promise/es6-promise.d.ts"/>

var Promise = require("es6-promise").Promise;
require('es6-promise').polyfill();

function test():Promise {
    var p:Promise = new Promise();
    return p;
}
Run Code Online (Sandbox Code Playgroud)

这是错误的:

Cannot find name 'Promise'.
Run Code Online (Sandbox Code Playgroud)

//或者:

var p = new Promise<string>((resolve, reject) => {
    resolve('a string');
});


//error=> Untyped function calls may not accept type arguments.
Run Code Online (Sandbox Code Playgroud)

从您自己的节点服务器端代码返回Promise的推荐方法是什么?

引用:

Ily*_*mov 52

main.ts

import {Promise} from 'es6-promise';
const p: Promise<string> = new Promise (
   (resolve: (str: string)=>void, reject: (str: string)=>void) => {
      const a: string = "hello from Promise";
      resolve(a);
   }
 );
p.then((st) => {
  console.log(st);
});
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
    "compilerOptions": {
        "target": "es3",
        "module": "commonjs",
        "declaration": false,
        "noImplicitAny": false,
        "noLib": false
    },
    "filesGlob": [
        "./**/*.ts",
        "!./node_modules/**/*.ts"
    ],
    "files": [
        "./main.ts",
        "./typings/es6-promise/es6-promise.d.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)

compileandrun.sh

#!/bin/sh
npm install es6-promise
tsd install es6-promise
tsc
node main.js
Run Code Online (Sandbox Code Playgroud)

  • 注意那些使用Angular 2的人:你不需要(也不应该使用)import {Promise}语句,你不需要es6-promise.d.ts,因为它与Angular 2框架捆绑在一起(截至beta 15,无论如何). (5认同)
  • 现在建议使用`typings`而不是`tsd`? (2认同)
  • 如果你使用Typescript 2+,你可以在tsconfig.json中指定promise:````compilerOptions":{"lib":["es2015.promise",(你的其他libs,ex"es5"和"dom") )]``` (2认同)
  • `typs install --save --global dt~es6-promise`就足够了`tsc --version`版本2.0.3 (2认同)

Bru*_*oLM 14

以下是在v2.1.1 +上,目标设置为 es5

我可以async/await通过安装es6-promise然后将其添加到文件顶部来使用Promises :

global.Promise = require('es6-promise').Promise;
Run Code Online (Sandbox Code Playgroud)

这就是 tsconfig.json

"lib": [ "es2015.promise", "es5" ],
Run Code Online (Sandbox Code Playgroud)

使用该import { Promise }表格对我来说不起作用,因为其他库崩溃了(例如:axios)


bvo*_*elr 8

我需要将其填充为不同的框架(特别是axios); 我不需要真正创建自己的承诺,所以这些解决方案都不适合我.幸运的是,答案很简单,如果隐藏得很好:

import { polyfill } from 'es6-promise'

polyfill();
Run Code Online (Sandbox Code Playgroud)