আমি টাইপস্ক্রিপ্ট কোডটি দেখছি এবং লক্ষ্য করেছি যে তারা ব্যবহার করছে:
interface Blablabla {
field: Object;
}
Objectবনাম ব্যবহার করে কী সুবিধা হবে any:
interface Blablabla {
field: any;
}
আমি টাইপস্ক্রিপ্ট কোডটি দেখছি এবং লক্ষ্য করেছি যে তারা ব্যবহার করছে:
interface Blablabla {
field: Object;
}
Objectবনাম ব্যবহার করে কী সুবিধা হবে any:
interface Blablabla {
field: any;
}
উত্তর:
Objectএর চেয়ে বেশি সীমাবদ্ধ any। উদাহরণ স্বরূপ:
let a: any;
let b: Object;
a.nomethod(); // Transpiles just fine
b.nomethod(); // Error: Property 'nomethod' does not exist on type 'Object'.
Objectবর্গ একটি নেই nomethod()ফাংশন, তাই transpiler আপনি ঠিক যে কহন একটি ত্রুটি উত্পন্ন করবে। আপনি যদি এর anyপরিবর্তে ব্যবহার করেন তবে আপনি ট্রান্সপ্লেলারটিকে মূলত বলছেন যে কিছু যায়, আপনি কী সঞ্চিত তা কোনও তথ্য সরবরাহ করছেন না a- এটি যে কোনও কিছু হতে পারে! আর তাই transpiler আপনি যাই হোক না কেন আপনি কিছু হিসাবে সংজ্ঞায়িত সঙ্গে চাও অনুমতি দেবে any।
সংক্ষেপে
any যে কোনও কিছু হতে পারে (সংকলনের ত্রুটি ছাড়াই আপনি এটিতে কোনও পদ্ধতি ইত্যাদি কল করতে পারেন)ObjectObjectক্লাসে সংজ্ঞায়িত ফাংশন এবং বৈশিষ্ট্যগুলি প্রকাশ করে ।বিট পুরানো, তবে কিছু নোট যুক্ত করতে আঘাত দেয় না।
আপনি যখন এই জাতীয় কিছু লিখবেন
let a: any;
let b: Object;
let c: {};
এবং এজন্যই
a.doSomething(); // Ok: the compiler trusts you on that
b.doSomething(); // Error: Object has no doSomething member
c.doSomething(); // Error: c neither has doSomething nor inherits it from Object
এবং কেন
a.toString(); // Ok: whatever, dude, have it your way
b.toString(); // Ok: toString is defined in Object
c.toString(); // Ok: c inherits toString from Object
সুতরাং Objectএবং {}টাইপস্ক্রিপ্ট সমতুল্য হয়।
আপনি যদি এই মত ফাংশন ঘোষণা
function fa(param: any): void {}
function fb(param: Object): void {}
পরমের জন্য কিছু গ্রহণ করার অভিপ্রায় সহ (সম্ভবত আপনি রান-টাইমে প্রকারগুলি পরীক্ষা করতে যাচ্ছেন এটির সিদ্ধান্ত নেওয়ার জন্য), মনে রাখবেন যে
এটা মূল্য লক্ষ যদিও, যে যদি PARAM একাধিক পরিচিত ধরনের গ্রহণ অনুমিত হয়, একটি ভাল পদ্ধতির ঘোষণা এটা ইউনিয়ন ধরনের ব্যবহার করার জন্য, হিসাবে
function fc(param: string|number): void {}
স্পষ্টতই, ও ও উত্তরাধিকারের বিধিগুলি এখনও প্রয়োগ হয়, সুতরাং আপনি যদি উত্সযুক্ত শ্রেণীর উদাহরণগুলি গ্রহণ করতে চান এবং তাদের বেস ধরণের ভিত্তিতে তাদের সাথে চিকিত্সা করতে চান
interface IPerson {
gender: string;
}
class Person implements IPerson {
gender: string;
}
class Teacher extends Person {}
function func(person: IPerson): void {
console.log(person.gender);
}
func(new Person()); // Ok
func(new Teacher()); // Ok
func({gender: 'male'}); // Ok
func({name: 'male'}); // Error: no gender..
বেস টাইপ উপায় এটা করতে হবে, নয় কোনো । কিন্তু যে এর OO যেমন পণ্য, সাধ্যের বাইরে, আমি শুধু নির্মল যে চেয়েছিলেন কোনো শুধুমাত্র যখন আপনি কি আসছে জানি না ব্যবহার করা উচিত, এবং অন্য যে কোন কিছুর জন্য আপনি সঠিক টাইপ টীকা করা উচিত নয়।
হালনাগাদ:
টাইপ করা বিষয় 2.2 একটি যোগ objectধরন, যা নির্দিষ্ট করে একটি মান একটি অ আদিম হল: (অর্থাত না number, string, boolean, symbol, undefined, অথবা null)।
হিসাবে সংজ্ঞায়িত ফাংশন বিবেচনা করুন:
function b(x: Object) {}
function c(x: {}) {}
function d(x: object) {}
xএই ফাংশনগুলির মধ্যে একইরূপে উপলব্ধ বৈশিষ্ট্য থাকবে তবে dআদিমকে কল করার জন্য এটি একধরণের ত্রুটি :
b("foo"); //Okay
c("foo"); //Okay
d("foo"); //Error: "foo" is a primitive
{}ইন্টারফেস (ইনলাইন) সংজ্ঞায়িত করার সাধারণ উপায়, কেবলমাত্র এই ক্ষেত্রে আপনি কোনও সদস্য ছাড়া ইন্টারফেসটি সংজ্ঞায়িত করছেন। সামান্য পার্থক্য প্রতিক্রিয়াতে ভালভাবে ব্যাখ্যা করা হয়েছে: " টাইপস্ক্রিপ্টের মতো অন্য কোনও কিছুর মতোই {}প্রসারিত Objectহয়"।
anyএবং রান-টাইম টাইপ চেকিং করুন। ব্যবহার করবেন না any, পরিবর্তে ধরনের আপনার বিরুদ্ধে যাচাই করছি একটি ইউনিয়ন ব্যবহার করুন: TypeA|InterfaceB|string। আপনার যদি অজানা প্রকারের জন্য ডিফল্ট কেসও থাকে তবে হয় {}বা Objectইউনিয়নে যোগ করুন ।
But variables of type Object only allow you to assign any value to them - you can’t call arbitrary methods on them, even ones that actually exist:আমাকে ভাবতে বাধ্য করে যে এমনকি কল করার toStringঅনুমতি নেই, যখন আসলে আমি মনে করি তারা exist at runtimeউত্তরটি পড়ার পরে বলতে চেয়েছিল ।
any টাইপস্ক্রিপ্টের সাথে সুনির্দিষ্ট কিছুটি অ্যালেক্সের উত্তরের মাধ্যমে বেশ ভালভাবে ব্যাখ্যা করা হয়েছে।
Objectজাভাস্ক্রিপ্ট objectটাইপ বোঝায় । সাধারণত হিসাবে {}বা কখনও কখনও ব্যবহৃত হয় new Object। জাভাস্ক্রিপ্টের বেশিরভাগ জিনিস অবজেক্ট ডেটা টাইপের সাথে সামঞ্জস্যপূর্ণ কারণ তারা এটি থেকে উত্তরাধিকার সূত্রে আসে। কিন্তু anyহয় টাইপ করা বিষয় নির্দিষ্ট এবং উভয় নির্দেশাবলী মধ্যে সবকিছু সঙ্গে সামঞ্জস্যপূর্ণ (উত্তরাধিকার ভিত্তিক নয়)। যেমন:
var foo:Object;
var bar:any;
var num:number;
foo = num; // Not an error
num = foo; // ERROR
// Any is compatible both ways
bar = num;
num = bar;
Objectএবং objectযা টাইপস্ক্রিপ্টে বিভিন্ন ধরণের।
Objectএবং পার্থক্যটি কি তার প্রসারিত করতে পারেন object?
.NET এর বিপরীতে যেখানে টাইপস্ক্রিপ্টে সমস্ত ধরণের "অবজেক্ট" থেকে আসে, সমস্ত ধরণের "যে কোনও" থেকে আসে। আমি কেবল এই তুলনাটি যুক্ত করতে চেয়েছিলাম কারণ আমি মনে করি এটি আরও সাধারণ হিসাবে তৈরি করা হবে। নেট বিকাশকারীরা টাইপস্ক্রিপ্ট একবার চেষ্টা করে।
অবজেক্টটি যে কোনওটির চেয়ে আরও সুনির্দিষ্ট ঘোষণা বলে মনে হচ্ছে। টাইপস্ক্রিপ্ট বিশেষ (বিভাগ 3) থেকে:
টাইপস্ক্রিপ্টের সমস্ত প্রকারভেদ যেকোন প্রকার নামে পরিচিত একক শীর্ষ ধরণের উপপ্রকার। যে কোনও কীওয়ার্ড এই ধরণের উল্লেখ করে। যে কোনও ধরণ হ'ল এক প্রকার যা কোনও জাভাস্ক্রিপ্ট মানকে কোনও বাধা ছাড়াই উপস্থাপন করতে পারে। অন্যান্য সমস্ত প্রকারগুলি আদিম প্রকার, অবজেক্টের ধরণ বা টাইপ পরামিতি হিসাবে শ্রেণীবদ্ধ করা হয়। এই ধরণেরগুলি তাদের মানগুলিতে বিভিন্ন স্থিতিশীল প্রতিবন্ধকতার পরিচয় দেয়।
এছাড়াও:
যেকোন প্রকারের কোনও জাভাস্ক্রিপ্ট মান উপস্থাপন করতে ব্যবহৃত হয়। যে কোনও ধরণের একটি মান জাভাস্ক্রিপ্টের মান হিসাবে একই ক্রিয়াকলাপগুলিকে সমর্থন করে এবং যে কোনও মানগুলিতে ক্রিয়াকলাপের জন্য ন্যূনতম স্ট্যাটিক প্রকারের পরীক্ষা করা হয়। বিশেষত, যে কোনও নামের বৈশিষ্ট্যগুলি যে কোনও মানের মাধ্যমে অ্যাক্সেস করা যায় এবং যে কোনও মানকে কোনও যুক্তি তালিকার সাথে ফাংশন বা কনস্ট্রাক্টর হিসাবে ডাকা যেতে পারে।
অবজেক্টগুলি একই নমনীয়তার অনুমতি দেয় না।
উদাহরণ স্বরূপ:
var myAny : any;
myAny.Something(); // no problemo
var myObject : Object;
myObject.Something(); // Error: The property 'Something' does not exist on value of type 'Object'.
অ্যালেক্সের উত্তরে যুক্ত করা এবং এটি সরলকরণ:
বস্তুগুলি তাদের ব্যবহারের সাথে আরও কঠোর এবং সেইজন্য প্রোগ্রামারকে আরও সংকলন সময় "মূল্যায়ন" শক্তি দেয় এবং তাই অনেক ক্ষেত্রে আরও "পরীক্ষার ক্ষমতা" সরবরাহ করে এবং কোনও ফাঁস রোধ করতে পারে, তবে যে কোনও একটি আরও জেনেরিক শব্দ এবং প্রচুর সংকলন হয় সময় চেক তাই উপেক্ষা করা হতে পারে।
{}Object