টাইপস্ক্রিপ্ট সহ স্প্রেড সিনট্যাক্স এবং নতুন সেট () ব্যবহার করুন


92

আমি অনন্য নম্বর পেতে নিম্নলিখিত কোডটি ব্যবহার করছি:

let uniques = [ ...new Set([1, 2, 3, 1, 1]) ]; // [1, 2, 3]

তবে টাইপ স্ক্রিপ্ট রিপোর্টের পরে ত্রুটি: টাইপ 'সেট' কোনও অ্যারে টাইপ নয়। আমি টাইপস্ক্রিপ্ট নিনজা নই, কেউ কি আমাকে বলতে পারে এখানে কি ভুল?


4
আমি মনে করি এটি কেবলমাত্র একটি টাইপস্ক্রিপ্ট বাগ, যদি আপনি যে সংস্করণটি ES2015 সমর্থন করার জন্য দাবী করছেন তবে তা।
পয়েন্টটি

4
@ পয়েন্টি এর জন্য দুঃখিত, আমার টিএসএস সংস্করণটি অন্তর্ভুক্ত করা উচিত যা 1.6.2
ডিম্বাকৃতি

উত্তর:


39

এটি একটি অনুপস্থিত বৈশিষ্ট্য। টাইপসক্রিপ্ট এই মুহূর্তে অ্যারেগুলিতে কেবল পুনরাবৃত্তিগুলি সমর্থন করে।


বিবৃতির জন্য ধন্যবাদ. আমি কাজ শুরু করতে। ফিল্টার () বা অন্য কিছু ব্যবহার করব। আমি এই বিশেষ ত্রুটি সম্পর্কে গিথুবটিতে কয়েকটি সমস্যাও পেয়েছি। আমি ভবিষ্যতে প্রকাশে এই বিষয়ে নজর রাখব on
ডিমের

96

আপডেট : টাইপসক্রিপ্ট ২.৩ এর সাহায্যে আপনি এখন আপনার সিএসকিফিগটিতে যুক্ত করতে পারেন "downlevelIteration": trueএবং এটি ES5 টার্গেট করার সময় কাজ করবে।

এর খারাপ দিকটি downlevelIterationহ'ল টিএসকে ট্রান্সপ্লার করার সময় বেশ কিছুটা বয়লারপ্লেট ইনজেকশন করতে হবে। প্রশ্ন থেকে একক লাইন যোগ করা বয়লারপ্লেটের 21 লাইন দিয়ে স্থানান্তর করে: (টাইপস্ক্রিপ্ট ২.6.১ হিসাবে)

এই বয়লারপ্লেটটি প্রতি ফাইলগুলিতে একবার ইনজেকশন দেওয়া হবে যা ডাউনলিল পুনরাবৃত্তি ব্যবহার করে এবং এই বয়লারপ্লেটটি "importHelpers"tsconfig এর মাধ্যমে বিকল্পটি ব্যবহার করে হ্রাস করা যেতে পারে । ( ডাউনলএল পুনরাবৃত্তিতে এই ব্লগপোস্টটি দেখুন এবং importHelpers)

বিকল্পভাবে, যদি ইএস 5 সমর্থনটি আপনার পক্ষে গুরুত্বপূর্ণ না হয় তবে আপনি সর্বদা প্রথম স্থানে "এস 6" লক্ষ্য করতে পারেন, সেক্ষেত্রে মূল কোডটি "ডাউনলিলিগ্রেশন" পতাকাটির প্রয়োজন ছাড়াই কাজ করে।


আসল উত্তর:

এটি প্রকারভেদ ES6 প্রতিস্থাপনের quirk বলে মনে হয়। ...অপারেটর কিছু কোনো ইটারেটরে সম্পত্তি, (দ্বারা অ্যাক্সেস করেছে যে কাজ করা উচিত obj[Symbol.iterator]) এবং সেট যে সম্পত্তি আছে।

এই সমস্যা এড়ানোর জন্য, আপনি ব্যবহার করতে পারেন Array.fromপ্রথম একটি অ্যারের সেট রূপান্তর করতে: ...Array.from(new Set([1, 2, 3, 1, 1]))


@ রিস্টাম: টাইপসক্রিপ্টটি কি আইআরইতে অ্যারে.ফ্রিমের জন্য পলিফিল সরবরাহ করে যদি "টার্গেট": tsconfig.json এ "এস 5"?
jackOfAll সমস্ত

4
@ জ্যাকআফএল না, টাইপসক্রিপ্ট আপনার জন্য প্রোটোটাইপগুলির কোনও পলিফিলিং করে না। যদি আপনি "টার্গেট": "এস 5" সেট করেন তবে পলিফিলিং প্রয়োজন এমন কোনও পদ্ধতি ব্যবহার করার চেষ্টা করলে এটি আপনাকে একটি সংকলক ত্রুটি দেয়।
রেটসাম

4
@ রিস্টাম এর সাথে দুর্দান্ত সমাধান Array.from। বেশিরভাগ অন্যান্য লোক মনে হয় কেবল এটির উপর ছেড়ে দেয়। একটি বাস্তব সমাধানের জন্য ধন্যবাদ!
রায়প্পস 14:58

এটি কোনও ত্রুটি নয়, তারা কেবলমাত্র লক্ষ্যটির জন্য এটি সমর্থন করে না es5( github.com/Mic Microsoft/TypeScript/issues/4031 দেখুন )। Array.fromযদি আপনার কাজ করা উচিত es2015(বা উচ্চতর es2017, esnextআপনার মধ্যে) libtsconfig মধ্যে তালিকা।
সাইমন হিনিশ

4
@ সিমোন হ্যানিশ এই লিঙ্কটির জন্য ধন্যবাদ: আমি আমার উত্তরটি আপডেট করেছি, আমি এখন এটিকে "বাগ" বলি না, তবে "ট্রান্সিলিপশন কিরক" বলি যা সম্ভবত আরও সঠিক শব্দ। আমি সেই লিঙ্ক থেকে ডাউনলিয়েল পুনরাবৃত্তি বিকল্প সম্পর্কে তথ্যও যুক্ত করেছি, যা মূল সমস্যাটিও সমাধান করে।
রিটসাম

67

আপনি অ্যারে থেকে অ্যারে রূপান্তর করতে অ্যারে.ফর্ম পদ্ধতিটিও ব্যবহার করতে পারেন

let uniques = Array.from(new Set([1, 2, 3, 1, 1])) ;
console.log(uniques);


অ্যারে ছড়িয়ে দেওয়ার বিন্দুটি কেবল নতুন অ্যারেতে পুনরুদ্ধার করার জন্য কী?
রবি কর্নেলিসসেন

4
Tsconfig এ "es6" লক্ষ্য করা সম্ভব না হলে। এবং স্প্রেড অপারেটর সহ সেট ব্যবহার করা দরকার, আপনি এটি কীভাবে করবেন?
নাট গেটেচ

মুল বক্তব্যটি হ'ল আপনি যদি ব্যবহার করেন তবে আপনার Array.from()আর স্প্রেড অপারেটরের দরকার নেই। এটি কেবল ওভারহেড যুক্ত করে। let uniques = Array.from(new Set([1, 2, 3, 1, 1]));
রবি কর্নেলিসসেন

8

আপনাকে "target": "es6",আপনার tsconfig এ সেট করতে হবে।


0

এটিকে কাজ করতে, আপনার প্রয়োজন হয় "টার্গেট": "ES6" (বা উচ্চতর) বা "ডাউনলিভিলিটারেশন": আপনার tsconfig.json এর সংকলক বিভাগে সত্য। এটি আমার সমস্যার সমাধান করেছে এবং ভাল কাজ করছে বা আমি ope আশা করি এটি আপনাকেও সহায়তা করবে।


-1

জাভাস্ক্রিপ্টে:

[ ...new Set([1, 2, 3, 1, 1]) ]

প্রকারভেদে:

Array.from(new Set([1, 2, 3, 1, 1]))

প্রতিক্রিয়া স্থিতিতে (সেটস্টেট):

setCart(Array.from(new Set([...cart, {title: 'Sample', price: 20}])));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.