Как использовать 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?
ссылки:
Ответы
Ответ 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