'অজানা' বনাম 'যে কোনও'


190

টাইপসক্রিপ্ট 3.0 unknownতাদের উইকি অনুসারে প্রকারটি প্রবর্তন করে :

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

unknownএবং মধ্যে পার্থক্য কি any? আমরা যখন ব্যবহার করা উচিত unknownউপর any?

উত্তর:


233

আপনি সম্বন্ধে আরও পড়তে পারেন unknownমধ্যে জনসংযোগ বা রেসিন ঘোষণা , কিন্তু এটা সারকথা হল:

[..] অজানা যা কোনটির টাইপ-নিরাপদ অংশ p যে কোনও কিছুই অজানা জন্য নির্ধারিত, কিন্তু অজানা নিজেকে এবং কোনও প্রকারের দৃser়তা বা নিয়ন্ত্রণ প্রবাহ ভিত্তিক সংকীর্ণতা ব্যতীত আর কিছুই অনুমোদিত নয় to তেমনি, অজানাতে কোনও নির্দিষ্ট প্রকারের আগে জোর দেওয়া বা সংকীর্ণ না করে কোনও ক্রিয়াকলাপ অনুমোদিত নয়।

কয়েকটি উদাহরণ:

let vAny: any = 10;          // We can assign anthing to any
let vUnknown: unknown =  10; // We can assign anthing to unknown just like any 


let s1: string = vAny;     // Any is assigable to anything 
let s2: string = vUnknown; // Invalid we can't assign vUnknown to any other type (without an explicit assertion)

vAny.method();     // ok anything goes with any
vUnknown.method(); // not ok, we don't know anything about this variable

প্রস্তাবিত ব্যবহার হ'ল:

প্রায়শই এমন সময় রয়েছে যেখানে আমরা টাইপস্ক্রিপ্টে স্বল্প-সক্ষম টাইপটি বর্ণনা করতে চাই। এটি এমন এপিআইগুলির জন্য দরকারী যা "এটি কোনও মান হতে পারে, তাই এটি ব্যবহারের আগে আপনাকে অবশ্যই কিছু ধরণের চেকিং করতে হবে" want এটি ব্যবহারকারীদের নিরাপদে প্রত্যাবর্তিত মানগুলি নিখুঁত করতে বাধ্য করে।


35
সি # ব্যাকগ্রাউন্ড থেকে যে কেউ আসছেন, anyতিনি পছন্দ করেন dynamicএবং unknownপছন্দ করেন object। আমি পছন্দ unknownকরি এটি কেবল আরও প্রকারের নিরাপদ। বিভ্রান্তিকর নাম যদিও।
নওফাল

1
আমি জানি না যে এটি তুলনা করা ভাল unknownএবং object@ নওফাল যদিও আমি মনে করি আপনি বিপরীতমুখীতা এবং সমবায়িকতার দিক দিয়ে যা পেয়েছেন তা আমি দেখতে পেয়েছি (উদাঃ যে কোনও বস্তু টাইপের objectজন্য unknownনির্ধারিত যদিও কোনও বস্তুর জন্য বা আদিম নির্ধারিত হতে পারে - একভাবে unknownনির্ধারিত করা যেতে পারে anyবা নিজেই এবং objectনির্ধারিত করা যেতে পারে dynamicবা নিজেই)। পাশের নোটে আমি অস্পষ্ট যে কেন টিএস ডক্স unknownশীর্ষ ধরণের হিসাবে উল্লেখ করে কারণ এটিতে আসলে সমস্ত ধরণের থাকে না ¯_ (ツ) _ / ¯
জর্ডান

38

অজানা এবং যে কোনও মধ্যে পার্থক্য বর্ণনা করা হয়:

অনেক পছন্দ any, যে কোনও মান নির্ধারিত হয় unknown; তবে, এর বিপরীতে any, আপনি প্রকারের সাথে মানগুলিতে কোনও বৈশিষ্ট্য অ্যাক্সেস করতে পারবেন না unknownবা তাদের কল করতে / নির্মাণ করতে পারবেন না। তদ্ব্যতীত, ধরণের মানগুলি unknownকেবলমাত্র unknownবা তে নির্ধারিত হতে পারে any

যখন আপনি ব্যবহার করা উচিত আপনার প্রশ্নের উত্তর দেওয়ার জন্য unknownওভার any:

এটি এমন এপিআইগুলির জন্য দরকারী যা "এটি কোনও মান হতে পারে, তাই এটি ব্যবহারের আগে আপনাকে অবশ্যই কিছু ধরণের চেকিং করতে হবে" want এটি ব্যবহারকারীদের নিরাপদে প্রত্যাবর্তিত মানগুলি নিখুঁত করতে বাধ্য করে।

কটাক্ষপাত টাইপ করা বিষয় 3.0 ঘোষণা ধরনের একটি পরিবর্তনশীল পরীক্ষণ ধরনের উদাহরণের জন্য unknownএবং একটি আরো বিস্তারিত ব্যাখ্যা।


21

any টাইপ করুন:

anyটাইপ সব সম্ভব জাতীয় মান প্রতিনিধিত্ব করে। প্রতিটি টাইপ টাইপ করার জন্য যোগ্য any। সুতরাং প্রকারটি anyটাইপ সিস্টেমের সর্বজনীন সুপার টাইপ। টিএস সংকলক টাইপ করা মানগুলিতে কোনও ক্রিয়াকলাপের অনুমতি দেবে any। উদাহরণ স্বরূপ:

let myVar: any;

myVar[0];
myVar();
myVar.length;
new myVar();

অনেক ক্ষেত্রে এটি টিএস সংকলকটির খুব লেন্সিয়েন্ট। অর্থাত্ এটি এটি অপারেশনগুলিকে অনুমতি দেবে যা আমরা রানটাইম ত্রুটির ফলস্বরূপ জানতে পারি।

unknown টাইপ করুন:

unknownটাইপ (ঠিক মত প্রতিনিধিত্ব করে any) সব সম্ভব জাতীয় মান। প্রতিটি টাইপ টাইপ করার জন্য যোগ্য unknown। সুতরাং টাইপটি unknownহ'ল টাইপ সিস্টেমের আরও একটি সর্বজনীন সুপার টাইপ (পাশাপাশি any)। তবে টিএস সংকলক টাইপ করা মানগুলিতে কোনও ক্রিয়াকলাপ অনুমোদন করবে নাunknown । তদ্ব্যতীত, unknownপ্রকারটি কেবলমাত্র টাইপের জন্য নির্ধারিত হয় any। একটি উদাহরণ এটি স্পষ্ট করবে:

let myVar: unknown;

let myVar1: unknown = myVar;   // No error
let myVar2: any = myVar;       // No error
let myVar3: boolean = myVar;   // Type 'unknown' is not assignable to type 'boolean'

// The following operations on myVar all give the error:
// Object is of type 'unknown'
myVar[0];
myVar();
myVar.length;
new myVar();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.