প্রকারলিপি: একটি খালি টাইপ করা ধারক অ্যারে তৈরি করা হচ্ছে


180

আমি টাইপস্ক্রিপ্টে "থ্রি অফ এ ক্রাইম" নামে একটি সাধারণ লজিক গেম তৈরি করছি।

টাইপস্ক্রিপ্টে টাইপযুক্ত অ্যারে প্রাক-বরাদ্দ করার চেষ্টা করার সময়, আমি এরকম কিছু করার চেষ্টা করেছি:

var arr = Criminal[];

যা ত্রুটিটি দিয়েছে "এক্সপ্রেশন টার্মের চেক ফর্ম্যাট"।

এটি করার চেষ্টাও করেছিলাম

var arr : Criminal = [];

এবং এটি উত্পাদিত "কোনও [] কে 'অপরাধী' রূপান্তর করতে পারে না

এটি করার জন্য 'টাইপস্ক্রিপ্ট' কী?

উত্তর:


162

বিদ্যমান উত্তরগুলি একটি বিকল্প মিস করেছে, সুতরাং এখানে একটি সম্পূর্ণ তালিকা রয়েছে:

// 1. Explicitly declare the type
var arr: Criminal[] = [];

// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];

// 3. Using the Array constructor
var arr = new Array<Criminal>();
  1. স্পষ্টভাবে ধরণের নির্দিষ্টকরণ হ'ল যখনই কোনও পরিবর্তনশীল ঘোষণার জন্য টাইপ অনুমান ব্যর্থ হয় তার সাধারণ সমাধান।

  2. প্রকারভেদ (কখনও কখনও কাস্ট বলা হয় তবে এটি টাইপস্ক্রিপ্টে সত্যই কাস্ট নয়) ব্যবহার করার সুবিধাটি কোনও অভিব্যক্তির জন্য কাজ করে, সুতরাং কোনও ভেরিয়েবল ঘোষণা না করলেও এটি ব্যবহার করা যেতে পারে। প্রকারের নিরীক্ষণের জন্য দুটি বাক্য গঠন রয়েছে, তবে আপনি যদি সে বিষয়ে যত্ন নেন তবে কেবলমাত্র পরবর্তীকর্মীরা জেএসএক্সের সাথে মিলিয়ে কাজ করবে।

  3. অ্যারে কনস্ট্রাক্টর ব্যবহার করা এমন একটি জিনিস যা কেবলমাত্র এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে আপনাকে সহায়তা করবে, তবে যা আমি ব্যক্তিগতভাবে সর্বাধিক পাঠযোগ্য find তবে রানটাইম * এ সামান্য পারফরম্যান্সের প্রভাব রয়েছে। এছাড়াও, যদি কেউ অ্যারে কনস্ট্রাক্টরটিকে নতুন করে সংজ্ঞায়িত করতে যথেষ্ট পাগল হন তবে অর্থটি পরিবর্তন হতে পারে

এটি ব্যক্তিগত পছন্দের বিষয়, তবে আমি তৃতীয় বিকল্পটি সর্বাধিক পঠনযোগ্য find বিস্তৃত ক্ষেত্রে উল্লিখিত ডাউনসাইডগুলি নগণ্য হবে এবং পাঠযোগ্যতা সবচেয়ে গুরুত্বপূর্ণ বিষয়।

*: মজার ব্যাপার; লেখার সময় ক্রোমের পারফরম্যান্সের পার্থক্য ছিল 60%, যখন ফায়ারফক্সে পরিমাপযোগ্য পারফরম্যান্সের পার্থক্য ছিল না।


60% ?? : ও ওটা বুনো
ম্যাক্স কপ্লান

239

টাইপস্ক্রিপ্টে টাইপ করা অ্যারেটি সঠিকভাবে প্রাক-বরাদ্দের বিষয়টি অ্যারে আক্ষরিক বাক্য গঠনের কারণে কিছুটা অস্পষ্ট হয়ে পড়েছিল, তাই এটি প্রথম চিন্তা করেছিলাম ততটা স্বজ্ঞাত ছিল না।

সঠিক উপায় হবে

var arr : Criminal[] = [];

এটি আপনাকে ভেরিয়েবল 'আরারে' সংরক্ষণ করে একটি সঠিকভাবে টাইপ করা, খালি অ্যারে দেবে

আশা করি এটি অন্যকে সহায়তা করবে!


20

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি সম্প্রতি একটি অনুরূপ সমস্যার মুখোমুখি হয়েছি যা এইভাবে সমাধান করা যায়নি, কারণ আমাকে একটি নির্দিষ্ট ধরণের খালি অ্যারেটি ফিরিয়ে দিতে হয়েছিল।

আমার ছিল

return [];

যেখানে টাইপ []ছিল Criminal[]

আমরাও return: Criminal[] [];না return []: Criminal[];আমার জন্য কাজ করেন।

প্রথম নজরে আমি এটি টাইপড ভেরিয়েবল তৈরি করে সমাধান করেছি (যেমন আপনি সঠিকভাবে রিপোর্ট করেছেন) এটি ফিরিয়ে দেওয়ার ঠিক আগে, তবে (জাভাস্ক্রিপ্ট ইঞ্জিনগুলি কীভাবে কাজ করে তা আমি জানি না) এটি ওভারহেড তৈরি করতে পারে এবং এটি কম পঠনযোগ্য।

পূর্ণতার জন্য আমি আমার উত্তরেও এই সমাধানটি প্রতিবেদন করব:

let temp: Criminal[] = [];
return temp;

শেষ পর্যন্ত আমি টাইপস্ক্রিপ্ট টাইপ কাস্টিংয়ের সন্ধান পেয়েছি, যা আমাকে আরও সংক্ষিপ্ত এবং পাঠযোগ্য (এবং সম্ভবত দক্ষ) উপায়ে সমস্যার সমাধান করার অনুমতি দিয়েছে:

return <Criminal[]>[];

আশা করি এটি ভবিষ্যতের পাঠকদের সহায়তা করবে!


1

সর্বজনীনভাবে অ্যাক্সেসের জন্য নীচের মত ব্যবহার করুন:

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