দেশীয় ES6 প্রতিশ্রুতি সহ টাইপস্ক্রিপ্ট কীভাবে ব্যবহার করবেন


121

আমি টাইপসক্রিপ্টের সম্পূর্ণ শিক্ষানবিশ এবং ভাবছি যে টাইপস্ক্রিপ্টে ES6 প্রতিশ্রুতি ব্যবহার করা সম্ভব এবং সেগুলি কাজ করার জন্য আমাকে কী করতে হবে। আমি নোড 0.11.14 চালাচ্ছি এবং সংকলনের সময় একটি ত্রুটি পাচ্ছি "" প্রতিশ্রুতি "নামটি পাওয়া যায় না"


1
প্রতিশ্রুতিগুলি এখনও es6-promise
নোডে

উত্তর:


128

বর্তমানের lib.d.ts এর সংজ্ঞায়িত প্রতিশ্রুতি নেই তাই এটির জন্য আপনার একটি অতিরিক্ত সংজ্ঞা ফাইলের প্রয়োজন কারণ আপনি সংকলন ত্রুটি পেয়ে যাচ্ছেন।

আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন (যেমন @ এলক্লানারস বলেছেন) ডিফিনিটাইল টাইপড থেকে এস 6-প্রতিশ্রুতি সংজ্ঞা

তারপরে আপনি এটির মতো এটি ব্যবহার করতে পারেন:

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

সম্পাদনা আপনি ইএস target (টাইপস্ক্রিপ্ট সংকলক সহ) লক্ষ্যবস্তু করার সময় এটি সংজ্ঞা ছাড়াই ব্যবহার করতে পারেন - নোট করুন আপনার এখনও রানটাইম অফ কোর্সে উপস্থিত থাকার প্রতিশ্রুতি প্রয়োজন (যাতে এটি পুরানো ব্রাউজারগুলিতে কাজ করবে না :)) আপনার সাথে নিম্নলিখিতগুলি যুক্ত / সম্পাদনা করুন tsconfig.json:

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

2 সম্পাদনা করুন যখন টাইপস্ক্রিপ্ট 2.0 প্রকাশিত হবে তখন জিনিসগুলি কিছুটা বদলে যাবে (যদিও উপরে এখনও কাজ করে) তবে সংজ্ঞা ফাইলগুলি নীচের মতো এনপিএম দিয়ে সরাসরি ইনস্টল করা যেতে পারে:

npm install --save @types/es6-promise- উত্স

প্রকারগুলি ব্যবহারের জন্য আরও তথ্যের সাথে edit3 উত্তর আপডেট করা হচ্ছে।

package.jsonকেবলমাত্র { }সামগ্রী হিসাবে একটি ফাইল তৈরি করুন (যদি আপনার কাছে ইতিমধ্যে প্যাকেজ.জসন না থাকে Call কল করুন npm install --save @types/es6-promiseএবং tsc --initপ্রথম এনপিএম ইনস্টল কমান্ড package.jsonএসএস-প্রতিশ্রুতি নির্ভরতা হিসাবে অন্তর্ভুক্ত করতে আপনাকে পরিবর্তন করবে । Tsc --init একটি tsconfig.jsonফাইল তৈরি করবে তোমার জন্য.

আপনি এখন প্রতিশ্রুতিটি আপনার টাইপ স্ক্রিপ্ট ফাইলে ব্যবহার করতে পারেন var x: Promise<any>;। সম্পাদন tsc -p .আপনার প্রকল্পের কম্পাইল করার। আপনার কোনও ত্রুটি থাকা উচিত নয়।


5
অনেক ধন্যবাদ ডিক ভ্যান ড্যান ব্রিংক! আপ এবং টিএসডি ক্যোয়ারির পরে চলছে এস--প্রতিশ্রুতি
অ্যাকশন

3
নোট করুন যে টাইপস্ক্রিপ্ট v1.7.x এস: প্রতিশ্রুতি সংজ্ঞা ফাইলটি সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও 12.0 \ কমন 7 \ আইডিই \ প্রচলিত এক্সটেনশনগুলি \ মাইক্রোসফ্ট \ টাইপস্ক্রিপ্ট \ lib.es6.d.ts
ডাইগোহব

2
আমি মনে করি আমার কাছে @ কোকোডোকোর মতো একই সমস্যা আছে - আমার প্যাকেজ.জেসন প্রথম বিবৃতি দেওয়ার পরে আপডেট হয়েছিল, তবে এটি ইন্টেলিসেন্স দ্বারা গ্রহণ করা হয়নি (আমি ভিএস ব্যবহার করছি), এটি স্থানান্তরিত হয় এবং চালিত হয় যদিও এটি ভিএস ইন্টেলিসেন্স ইস্যুর মতো মনে হয় ... এই সম্পর্কে কোন ধারণা? আমি ইতিমধ্যে প্যাকেজগুলি পুনরুদ্ধার / ইনস্টল করার চেষ্টা করেছি, তবে কোনও পার্থক্য হয়নি।
rumblefx0

2
হ্যালো. আমি মনে করি এর --save-devপরিবর্তে পতাকাটি ব্যবহার করা উচিত --save, কারণ গ্রন্থাগারটি কেবল সংকলনের সময় ব্যবহৃত হয়।
মিঃ

2
এটি পুরানো। আপনাকে ES6 এ লক্ষ্য নির্ধারণ করতে হবে না বা কোনও টাইপিং ফাইল ইনস্টল করতে হবে না। আমার উত্তর নীচে দেখুন।
পলদীপাইন্ড

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 install @types/es6-shim --save-dev

বিকল্প # 3

টাইপ করা বিষয় 2.0 আগে, ব্যবহার typings ইনস্টল করার es6-shimথেকে বিশ্বব্যাপী DefinitelyTyped

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

typingsবিকল্প ব্যবহার npmইনস্টল করতে typingsবিশ্বব্যাপী এবং তারপর ব্যবহার typingsshim ইনস্টল করতে। dt~উপসর্গ DefinitelyTyped থেকে shim ডাউনলোড করতে মানে। --globalবিকল্প উপায়ে যে shim এর ধরনের প্রকল্পের সর্বত্র পাওয়া যাবে।

আরো দেখুন

https://github.com/Mic Microsoft/TypeScript/issues/7788 - 'প্রতিশ্রুতি' নামটি খুঁজে পাওয়া যায় না এবং 'প্রয়োজনীয়' নাম খুঁজে পাওয়া যায় না


2
es2016আপনার টার্গেট ES2016 সমর্থন না করা সহ অন্তর্ভুক্ত করা ভাল ধারণা নয়। অনেকগুলি ব্রাউজার রয়েছে যা প্রতিশ্রুতিগুলিকে সমর্থন করে তবে ES2016 এ সবকিছুই সমর্থন করে না। es2015.promiseES2016 এর প্রতিটি কিছুর জন্য টান না দিয়ে কেবল প্রতিশ্রুতির জন্য প্রকারগুলি অন্তর্ভুক্ত করতে ব্যবহার করুন ।
প্যালডেপাইন্ড

23

টাইপস্ক্রিপ্ট ২.০ অনুসারে আপনি নিজের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত করে দেশীয় প্রতিশ্রুতিগুলির জন্য টাইপগুলি অন্তর্ভুক্ত করতে পারেন tsconfig.json

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

এর মধ্যে ES6 এ লক্ষ্য নির্ধারণ না করে টাইপস্ক্রিপ্টের সাথে আসা প্রতিশ্রুতি ঘোষণাগুলি অন্তর্ভুক্ত থাকবে।


3
এটি আমার পক্ষে সেরা উত্তর answer এটির জন্য আপনার সংকলনের লক্ষ্য পরিবর্তন করা বা সমস্ত এসএস ২০১৫ টাইপগুলি আনার প্রয়োজন হয় না।
এথান

আপনি কেবলমাত্র নতুন ব্রাউজারগুলি সমর্থন করলে এটি একটি বিকল্প। আপনার যদি আই 10 বা ততোধিক পুরানো অ্যান্ড্রয়েড ডিভাইস সমর্থন করে তবে আপনার এখনও একটি পলিফিল প্রয়োজন।
ডিক ভ্যান ড্যান ব্রিংক

13

আপনি যদি নোড.জেএস ০.০২ বা তার বেশি / টাইপস্ক্রিপ্ট ১.৪ বা তার বেশি ব্যবহার করেন তবে কেবল সংকলক বিকল্পগুলি যুক্ত করুন:

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

আরও তথ্য: https://github.com/Mic Microsoft/ TypeScript / wiki / Compiler- অপশন

আপনি যদি ব্যবহার করেন tsconfig.jsonতবে এটি পছন্দ করুন:

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

আরও তথ্য: https://github.com/Mic Microsoft/ TypeScript / wiki / tsconfig.json


আপনি আসলে একসাথে কমনজ এবং এস use ব্যবহার করতে পারবেন না।
অ্যাড্রিয়ান বের

3
@ অ্যাড্রিয়ানবার আসলে বাস্তবে পারবেন, জিনিস বদলে গেছে। github.com/Mic Microsoft
প্ল্যানটাইন ইয়াও

আপনি যদি আইই সমর্থন করার পরিকল্পনা করেন তবে এটি কাজ করবে না। ব্রাউজারটি চালানোর সময় আপনি 'সিনট্যাক্স ত্রুটি' পেয়ে যাবেন।
রনিনকডার

12

এটি করার জন্য এটি অতি সাম্প্রতিক উপায়, উপরের উত্তরটি পুরানো:

typings install --global es6-promise


টাইপিং ইতিমধ্যে বেশ কিছু সময়ের জন্য উপস্থিত রয়েছে তবে টাইপস্ক্রিপ্ট ২.০ সরাসরি এনপিএম থেকে সংজ্ঞা ফাইলগুলি ইনস্টল করতে দেয় (যাতে আপনার টাইপের মতো অতিরিক্ত সরঞ্জামের প্রয়োজন হয় না)। টাইপস্ক্রিপ্ট ২.০ উপলব্ধ হলে তথ্য সহ আমার পোস্ট আপডেট করুন।
ডিক ভ্যান ড্যান ব্রিংক

3
আমরা নিম্নলিখিত ত্রুটিটি পেয়েছি: একটি বৈশ্বিক মডিউল হিসাবে "এস 6-প্রতিশ্রুতি" সংকলন করার চেষ্টা করা হয়েছে, তবে এটি বাহ্যিক মডিউলের মতো দেখাচ্ছে। চালিয়ে যাওয়ার জন্য আপনাকে বৈশ্বিক বিকল্পটি সরিয়ে ফেলতে হবে।
শান লুটিন

এখন সাম্প্রতিকতম উপায় হল: ইনস্টল npm @ প্রকার / --save es6-প্রতিজ্ঞা
Berty

এটি এখন সবচেয়ে সাম্প্রতিক উপায় নয়। বাক্সের বাইরে প্রতিশ্রুতিগুলির জন্য প্রকার সহ টাইপস্ক্রিপ্ট শিপস। কিছু ইনস্টল করার প্রয়োজন নেই। আমার উত্তর দেখুন।
প্যালডেপাইন্ড

5

নেটিভ ইএস 6 টি ভিজুয়াল স্টুডিও 2015+ নোড.জেএস সরঞ্জামগুলিতে টাইপস্ক্রিপ্ট সহ প্রতিশ্রুতি ব্যবহার করে 1.2

ES6 প্রতিশ্রুতি দেশীয় হিসাবে কোনও এনপিএম ইনস্টল প্রয়োজন।

নোড.জেএস প্রকল্প -> সম্পত্তি -> টাইপস্ক্রিপ্ট বিল্ড ট্যাব 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"এবং ২.০ এর নীচে টাইপস্ক্রিপ্ট সংস্করণ:

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

বি। ব্যবহার করে "target": "es5"এবং টাইপস্ক্রিপ্ট সংস্করণ 2.0 বা হাইজার:

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

সি যদি ব্যবহার "target": "es6"করে থাকে তবে কিছু করার দরকার নেই।


4
আমি "target": "es6"টাইপস্ক্রিপ্ট ২.১.১ ব্যবহার করছি এবং এখনও পাচ্ছি Cannot find name 'Promise'
জাকদানস

-1

@types/core-jsএটি "target": "es5"আমার tsconfig এ সেট সহ কাজ করতে আমাকে 9.36 এ ডাউনগ্রেড করতে হয়েছিল।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.