2015-09-05 2 views
40

Я прочитал this SO question, но у меня проблемы с обещаниями работать с машинописным текстом. Надеюсь, мы сможем сделать четкое руководство. Это для проекта сервер/узел. Я фактически использую последние iojs, но нацеливаю ES5 на выход.как использовать es6-обещания с машинописным текстом?

$ 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. 

Что такое рекомендуемый способ вернуть обещание от собственного сервера узла кода на стороне?

ссылки:

ответ

45

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 
+0

отличный и подробный ответ, спасибо большое! – dcsan

+2

Теперь рекомендуется использовать 'typings', а не' tsd'? –

+5

Примечание для тех, кто использует Angular 2: вам не нужно (и не следует использовать) заявление import {Promise}, вам не нужно es6-prom.d.ts, так как это поставляется в комплекте с ракурсом Angular 2 (as бета-версии 15). –

10

Ниже был на v2.1.1 + с целевым набором для es5

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

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

И это в tsconfig.json

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

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

1

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

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

Если я это сделаю, мне нужно импортировать 'Promise' или я могу просто использовать его ? –

0

Изменение целевого на «es6» в вашем tsconfig.json

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

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

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

3

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

import { polyfill } from 'es6-promise' 

polyfill(); 
+0

Супер запоздалый ответ, но я просто хотел подслушать, что твое личное было моим подойти. TS 2.7.2 без каких-либо других фреймворков (например, без углов), обещание es6, а затем 'polyfill()' было самым простым способом поддержки IE11. Спасибо. – mschofield

Смежные вопросы