Подтвердить что ты не робот

Как использовать es6- promises с typescript?

Я прочитал этот вопрос SO, но не смог получить promises для работы с typescript. Надеюсь, мы сможем сделать четкое руководство. Это для проекта server/ node. Я на самом деле использую последние 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;
}

это дает ошибку:

Cannot find name 'Promise'.

//альтернативно:

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


//error=> Untyped function calls may not accept type arguments.

Каков рекомендуемый способ возврата обещания из собственного кода сервера node?

ссылки:

4b9b3361

Ответ 1

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);
});

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"
    ]
}

compileandrun.sh

#!/bin/sh
npm install es6-promise
tsd install es6-promise
tsc
node main.js

Ответ 2

Следующее было на v2.1.1 + с целевым значением, установленным на es5

Я смог использовать Promises с async/await, установив es6-promise, а затем добавив это в начало файла:

global.Promise = require('es6-promise').Promise;

И это для tsconfig.json

"lib": [ "es2015.promise", "es5" ],

Использование формы import { Promise } не сработало для меня, как сбивали другие библиотеки (например: axios)

Ответ 3

Мне понадобилось polyfill это для другой структуры (в частности, axios); Мне не нужно было создавать собственный promises, поэтому ни один из этих решений не работал у меня. К счастью, ответ был прост, если он был хорошо скрыт:

import { polyfill } from 'es6-promise'

polyfill();

Ответ 4

Добавьте в package.json следующее:

"devDependencies": {
"@types/es6-promise": "^0.0.32"
},
"dependencies": {
"es6-promise": "~4.1.0"
}

Ответ 5

Измените цель на "es6" в tsconfig.json

"compilerOptions": {"target": "es6" }

Или установить TypeScript для Visual Studio 2015 также можно решить эту проблему без изменения tsconfig.json

https://www.microsoft.com/en-us/download/details.aspx?id=48593