कैसे मूल ES6 वादों के साथ टाइपस्क्रिप्ट का उपयोग करने के लिए


121

मैं टाइपस्क्रिप्ट के लिए एक पूर्ण शुरुआत हूं और सोच रहा हूं कि क्या टाइपस्क्रिप्ट में ES6 वादों का उपयोग करना संभव है और मुझे उन्हें काम करने के लिए क्या करना होगा। मैं नोड ०.११.१४ चला रहा हूँ और संकलन के दौरान एक त्रुटि हो रही है "प्रॉमिस" नाम नहीं ढूँढ सकता


1
वादे नोड में अभी तक नहीं हैं, आपको पैकेज की आवश्यकता है, कोशिश करेंes6-promise
elclanrs

जवाबों:


128

वर्तमान lib.d.ts में यह वादा नहीं किया गया है ताकि आपको इसके लिए एक अतिरिक्त परिभाषा फ़ाइल की आवश्यकता हो, यही कारण है कि आपको संकलन त्रुटियाँ मिल रही हैं।

आप उदाहरण के उपयोग के लिए जा सकते थे (@elclanrs की तरह कहते हैं) DefinitelyTyped से परिभाषा फ़ाइल के साथ ES6 वादा पैकेज का उपयोग करें: ES6 वादा परिभाषा

आप इसे इस तरह उपयोग कर सकते हैं:

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

संपादित करें जब आप ES6 (टाइपस्क्रिप्ट कंपाइलर के साथ) को लक्षित करते हुए परिभाषा के बिना इसका उपयोग कर सकते हैं - ध्यान दें कि आपको अभी भी रनटाइम में मौजूद होने के लिए वादे की आवश्यकता है (इसलिए यह पुराने ब्राउज़रों में काम नहीं करेगा :)) अपने निम्नलिखित में जोड़ें / संपादित करें tsconfig.json:

"compilerOptions": {
    "target": "ES6"
}

2 संपादित करें जब टाइपस्क्रिप्ट 2.0 बाहर आ जाएगी तो चीजें थोड़ी बदल जाएंगी (हालांकि अभी भी ऊपर काम करता है) लेकिन परिभाषा फ़ाइलों को सीधे एनआईओएस के साथ स्थापित किया जा सकता है:

npm install --save @types/es6-promise- स्रोत

edit3 अद्यतन प्रकार के उपयोग के लिए अधिक जानकारी के साथ उत्तर देना।

package.jsonकेवल { }सामग्री के रूप में एक फ़ाइल बनाएं (यदि आपके पास एक पैकेज नहीं है। पहले से ही कॉल करें। कॉल करें npm install --save @types/es6-promiseऔर tsc --initपहले package.jsonnpm इंस्टॉलेशन कमांड आपके एस्क्यू -6 को एक निर्भरता के रूप में शामिल करने के लिए वादा करेगा। tsc --init एक tsconfig.jsonफाइल बनाएगा। तुम्हारे लिए।

अब आप अपनी टाइपस्क्रिप्ट फ़ाइल में वादे का उपयोग कर सकते हैं var x: Promise<any>;tsc -p .अपने प्रोजेक्ट को संकलित करने के लिए निष्पादित करें। आपको कोई त्रुटि नहीं होनी चाहिए।


5
बहुत धन्यवाद डिक वैन ब्रिंक! tsd क्वेरी es6-वादा --action install --save
dchang

3
ध्यान दें कि टाइपस्क्रिप्ट v1.7.x सी 6 प्रोग्राम फाइल की परिभाषा को C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TypeScript \ lib.es6.d.ts पर परिभाषित करता है
डेगोहब

2
मुझे लगता है कि मेरे पास @Kokodoko जैसा ही मुद्दा है - मेरा पैकेज.जॉन पहले स्टेटमेंट के बाद अपडेट हो गया, लेकिन इसकी इंटेलीसेंस (मैं वीएस का उपयोग कर रहा हूं) द्वारा नहीं उठाया जा रहा है, यह ट्रांसपाइल्स और रन करता है, हालांकि ऐसा लगता है कि वीएस इंटेलीजेंस मुद्दा है। ... इस पर कोई विचार? मैंने पहले ही पैकेजों को पुनर्स्थापित / स्थापित करने की कोशिश की, लेकिन कोई फर्क नहीं पड़ा।
रमबलफएक्स ०

2
हैलो। मुझे लगता है कि ध्वज --save-devका उपयोग इसके बजाय किया जाना चाहिए --save, क्योंकि पुस्तकालय केवल संकलन समय पर उपयोग किया जाता है।
मृग

2
यह पुराना है। आपको ईएस 6 का लक्ष्य निर्धारित करने की आवश्यकता नहीं है और न ही टाइपिंग फ़ाइल स्थापित करनी है। नीचे मेरा जवाब देखें।
पलपींड

50

वैकल्पिक # 1

का प्रयोग करें targetऔर libसंकलक विकल्पों के लिए सीधे संकलित करने के लिए es5इंस्टॉल किए बिना es6-shim। (टाइपस्क्रिप्ट के साथ परीक्षण किया गया 2.1.4)। परिवाद अनुभाग में, es2016या तो का उपयोग करें es2015.promise

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

वैकल्पिक # 2

प्रकार संगठनes6-shim से स्थापित करने के लिए NPM का उपयोग करें

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

वैकल्पिक # 3

टाइपस्क्रिप्ट 2.0 से पहले, विश्व स्तर पर निश्चित रूप से स्थापित करने के लिए टाइपिंग का उपयोग करें ।es6-shim

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

typingsविकल्प का उपयोग करता npmस्थापित करने के लिए typingsविश्व स्तर पर और उसके बाद का उपयोग करता typingsशिम स्थापित करने के लिए। dt~उपसर्ग DefinitelyTyped से शिम डाउनलोड करने के लिए इसका मतलब है। --globalविकल्प का मतलब है कि शिम के प्रकार परियोजना भर में उपलब्ध हो जाएगा।

यह सभी देखें

https://github.com/Microsoft/TypeScript/issues/7788 - 'प्रॉमिस' नाम नहीं ढूँढ सकते हैं और 'आवश्यकता' नाम नहीं ढूँढ सकते


2
es2016जब तक आपका लक्ष्य ES2016 का समर्थन नहीं करता है तब तक शामिल करना एक अच्छा विचार नहीं है। बहुत सारे ब्राउज़र हैं जो वादों का समर्थन करते हैं लेकिन ES2016 में सब कुछ नहीं। es2015.promiseES2016 में सब कुछ के लिए प्रकारों में खींचने के बिना सिर्फ वादों के प्रकारों को शामिल करने के लिए उपयोग करें ।
paldepind

23

टाइपस्क्रिप्ट 2.0 के रूप में आप अपने में निम्नलिखित को शामिल करके मूल वादों के लिए टाइपिंग शामिल कर सकते हैं tsconfig.json

"compilerOptions": {
    "lib": ["es5", "es2015.promise"]
}

इसमें ईएस 6 को लक्ष्य निर्धारित किए बिना टाइपस्क्रिप्ट के साथ आने वाले वादे की घोषणाएं शामिल होंगी।


3
यह सबसे अच्छा जवाब है, मुझे लगता है। इसे आपके संकलन लक्ष्य को बदलने या सभी es2015 टाइपिंग में लाने की आवश्यकता नहीं है।
इथन

यह एक विकल्प है जब आप केवल नए ब्राउज़रों का समर्थन करते हैं। यदि आपको IE10 या पुराने Android उपकरणों की आवश्यकता है, तो आपको अभी भी एक पॉलीफ़िल की आवश्यकता है।
डिक वैन डेन ब्रिंक

13

यदि आप नोड .js 0.12 या इसके बाद के संस्करण / टाइपस्क्रिप्ट 1.4 या इसके बाद के संस्करण का उपयोग करते हैं, तो बस संकलक विकल्प जोड़ें जैसे:

tsc a.ts --target es6 --module commonjs

अधिक जानकारी: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options

यदि आप उपयोग करते हैं tsconfig.json, तो इस तरह:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6"
    }
}

अधिक जानकारी: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json


आप वास्तव में आम और es6 का एक साथ उपयोग नहीं कर सकते हैं।
एड्रियन बेर

3
@ AdrianBer वास्तव में आप कर सकते हैं, चीजें बदल गईं। github.com/Microsoft/TypeScript/wiki/…
प्लांटैन याओ

यदि आप IE का समर्थन करने की योजना बना रहे हैं तो यह काम नहीं करेगा। इसे चलाते समय आपको ब्राउज़र में 'सिंटैक्स त्रुटि' मिलेगी।
रॉनिनकोडर

12

ऐसा करने का यह सबसे हालिया तरीका है, उपरोक्त उत्तर पुराना है:

typings install --global es6-promise


टाइपिंग पहले से ही कुछ समय के लिए मौजूद है, लेकिन टाइपस्क्रिप्ट 2.0 एनपीएम से सीधे परिभाषा फ़ाइलों को स्थापित करने की अनुमति देगा (इसलिए आपको टाइपिंग जैसे अतिरिक्त टूल की आवश्यकता नहीं है)। टाइपस्क्रिप्ट 2.0 उपलब्ध हो जाएगा जब जानकारी के साथ मेरी पोस्ट अपडेट किया गया।
डिक वैन डेन ब्रिंक

3
हमें निम्न त्रुटि प्राप्त हो रही है: "es6-वादा" को एक वैश्विक मॉड्यूल के रूप में संकलित करने का प्रयास किया गया, लेकिन यह एक बाहरी मॉड्यूल की तरह दिखता है। जारी रखने के लिए आपको वैश्विक विकल्प को निकालना होगा।
शॉन लुट्टिन

अब सबसे हालिया तरीका है: npm install @ type / es6-वादा
बर्टी

यह अब सबसे हालिया तरीका नहीं है। बॉक्स से बाहर वादे के लिए टाइप के साथ टाइपस्क्रिप्ट जहाज। कुछ भी स्थापित करने की आवश्यकता नहीं है। मेरा जवाब देखिए।
paldepind

5

देशी ES6 का उपयोग करना Visual Studio 2015 + Node.js उपकरण 1.2 में टाइपस्क्रिप्ट के साथ वादा करता है

ES6 प्रॉमिस के मूल रूप में कोई npm इंस्टाल आवश्यक नहीं है।

Node.js परियोजना -> गुण -> टाइपस्क्रिप्ट बनाएँ टैब ECMAScript संस्करण = ECMAScript6

import http = require('http');
import fs = require('fs');

function findFolderAsync(directory : string): Promise<string> {

    let p = new Promise<string>(function (resolve, reject) {

        fs.stat(directory, function (err, stats) {

            //Check if error defined and the error code is "not exists"
            if (err && err.code === "ENOENT") {
                reject("Directory does not exist");
            }
            else {
                resolve("Directory exists");
            }
        });

    });
    return p;
}

findFolderAsync("myFolder").then(

    function (msg : string) {
        console.log("Promise resolved as " + msg); 
    },
    function (msg : string) {
        console.log("Promise rejected as " + msg); 
    }
);

5

यदि "target": "es5"2.0 का उपयोग कर और टाइपस्क्रिप्ट संस्करण 2.0 से नीचे है:

typings install es6-promise --save --global --source dt

B. यदि उपयोग कर रहे हैं "target": "es5"और टाइपस्क्रिप्ट संस्करण 2.0 या हाइगर:

"compilerOptions": {
    "lib": ["es5", "es2015.promise"]
}

C. यदि उपयोग कर रहे हैं "target": "es6", तो कुछ भी करने की आवश्यकता नहीं है।


4
मैं "target": "es6"टाइपस्क्रिप्ट 2.1.1 के साथ उपयोग कर रहा हूं और अभी भी कर रहा हूं Cannot find name 'Promise'
२०

-1

मुझे अपने tsconfig में सेट के @types/core-jsसाथ काम करने के लिए इसे 9.36 तक डाउनग्रेड करना पड़ा "target": "es5"

"@types/core-js": "0.9.36",

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.