ব্যবহারের ক্ষেত্রে: #
-প্রাইভেট ফিল্ড
মুখবন্ধ:
সংকলন সময় এবং রান-সময় গোপনীয়তা
#
- ব্যক্তিগত ক্ষেত্রগুলি সংকলন-সময় এবং রান-টাইম গোপনীয়তা সরবরাহ করে, যা "হ্যাকযোগ্য" নয়। শ্রেণিবদ্ধের বাইরে থেকে কোনও সদস্যের সরাসরি কোনও উপায়ে কোনও সদস্যের প্রবেশ রোধ করার এটি একটি প্রক্রিয়া ।
class A {
#a: number;
constructor(a: number) {
this.#a = a;
}
}
let foo: A = new A(42);
foo.#a; // error, not allowed outside class bodies
(foo as any).#bar; // still nope.
নিরাপদ শ্রেণির উত্তরাধিকার
#
- ব্যক্তিগত ক্ষেত্রগুলি একটি অনন্য সুযোগ পায়। সমান নাম সহ বেসরকারী সম্পত্তির দুর্ঘটনাজনিত ওভাররাইট ছাড়াই শ্রেণিবদ্ধ শ্রেণিবদ্ধকরণ কার্যকর করা যেতে পারে।
class A {
#a = "a";
fnA() { return this.#a; }
}
class B extends A {
#a = "b";
fnB() { return this.#a; }
}
const b = new B();
b.fnA(); // returns "a" ; unique property #a in A is still retained
b.fnB(); // returns "b"
টিএস সংকলক সৌভাগ্যক্রমে একটি ত্রুটি প্রকাশ করে, যখন private
বৈশিষ্ট্যগুলি ওভাররাইট হওয়ার ঝুঁকিতে থাকে ( উদাহরণটি দেখুন) )। তবে একটি সংকলন-সময় বৈশিষ্ট্যের প্রকৃতির কারণে রান-টাইমে সমস্ত কিছু এখনও সম্ভব, প্রদত্ত সংকলন ত্রুটিগুলি উপেক্ষা করা হয় এবং / অথবা নির্গত জেএস কোডটি ব্যবহার করা হয়।
বাহ্যিক গ্রন্থাগারগুলি
গ্রন্থাগারের লেখকরা #
ক্লায়েন্টদের জন্য ব্রেকিং পরিবর্তন না করে সনাক্তকারী-ব্যক্তিগত সনাক্তকারীকে অশোধক করতে পারেন । অন্যদিকে গ্রন্থাগার ব্যবহারকারীরা অভ্যন্তরীণ ক্ষেত্রগুলি অ্যাক্সেস করা থেকে সুরক্ষিত।
জেএস এপিআই- #
গোপনীয় ক্ষেত্র বাদ দেয়
অন্তর্নির্মিত জেএস ফাংশন এবং পদ্ধতি-ব্যক্তিগত #
ক্ষেত্রগুলিকে উপেক্ষা করে। এটি রান-টাইমে আরও প্রত্যাশিত সম্পত্তি নির্বাচন করতে পারে। উদাহরণ: Object.keys
, Object.entries
, JSON.stringify
, for..in
লুপ এবং অন্যদের ( কোড নমুনা ; এছাড়াও ম্যাট Bierner দেখি উত্তর ):
class Foo {
#bar = 42;
baz = "huhu";
}
Object.keys(new Foo()); // [ "baz" ]
কেস ব্যবহার করুন: private
কীওয়ার্ড
মুখবন্ধ:
অভ্যন্তরীণ শ্রেণীর এপিআই এবং রাষ্ট্রের অ্যাক্সেস (কেবলমাত্র সংকলন-সময় গোপনীয়তা)
private
কোনও শ্রেণীর সদস্যরা রান-টাইমে প্রচলিত সম্পত্তি। আমরা এই নমনীয়তাটি শ্রেণীর অভ্যন্তরীণ এপিআই বা বাইরে থেকে স্টেট অ্যাক্সেস করতে ব্যবহার করতে পারি। সংকলক চেকগুলি সন্তুষ্ট করার জন্য, প্রকারের দাবি, গতিশীল সম্পত্তি অ্যাক্সেসের মতো প্রক্রিয়া বা @ts-ignore
অন্যদের মধ্যে ব্যবহার করা যেতে পারে।
টাইপ অ্যাসেরেশন ( as
/ <>
) এবং any
টাইপড ভেরিয়েবল অ্যাসাইনমেন্ট সহ উদাহরণ :
class A {
constructor(private a: number) { }
}
const a = new A(10);
a.a; // TS compile error
(a as any).a; // works
const casted: any = a; casted.a // works
টিএস এমনকি private
একটি পলায়ন-হ্যাচ সহ কোনও সদস্যের গতিশীল সম্পত্তি অ্যাক্সেসের অনুমতি দেয় :
class C {
private foo = 10;
}
const res = new C()["foo"]; // 10, res has type number
ব্যক্তিগত অ্যাক্সেসটি কোথায় বোঝায়? (1) ইউনিট পরীক্ষা, (2) ডিবাগিং / লগিং পরিস্থিতি বা (3) প্রকল্পের অভ্যন্তরীণ ক্লাসগুলির (অপেন-শেষ তালিকা) সহ অন্যান্য উন্নত কেস পরিস্থিতি।
অভ্যন্তরীণ ভেরিয়েবলের অ্যাক্সেস কিছুটা পরস্পরবিরোধী - অন্যথায় আপনি এগুলিকে private
প্রথম স্থানে তৈরি করতে পারতেন না । একটি উদাহরণ দেওয়ার জন্য, ইউনিট পরীক্ষাগুলি বাস্তবায়ন বিশদ হিসাবে গোপন ব্যক্তিগত ক্ষেত্রের সাথে কালো / ধূসর বাক্সের বলে মনে করা হয়। যদিও বাস্তবে, ক্ষেত্রে থেকে কেস পর্যন্ত বৈধ পন্থা থাকতে পারে।
সমস্ত ES পরিবেশে উপলব্ধ
টিএস private
সংশোধকগুলি সমস্ত ইএস লক্ষ্যমাত্রার সাথে ব্যবহার করা যেতে পারে। #
- ব্যক্তিগত ক্ষেত্রগুলি কেবলমাত্র target
ES2015
/ ES6
বা ততোধিকের জন্য উপলব্ধ । ES6 + এ, WeakMap
ডাউনলিল বাস্তবায়ন হিসাবে অভ্যন্তরীণভাবে ব্যবহৃত হয় ( এখানে দেখুন )। নেটিভ- #
প্রাইভেট ক্ষেত্রগুলি বর্তমানে প্রয়োজন target
esnext
।
ধারাবাহিকতা এবং সামঞ্জস্য
দলগুলি private
কেবলমাত্র অ্যাক্সেস মডিফায়ার হিসাবে ব্যবহার প্রয়োগ করতে কোডিং গাইডলাইন এবং লিন্টার নিয়ম ব্যবহার করতে পারে । এই বিধিনিষেধটি ধারাবাহিকতায় সহায়তা করতে পারে এবং #
পিছনের সামঞ্জস্যপূর্ণ উপায়ে প্রাইভেট ফিল্ড নোটেশনের সাথে বিভ্রান্তি এড়াতে পারে ।
প্রয়োজনে প্যারামিটারের বৈশিষ্ট্য (কনস্ট্রাক্টর অ্যাসাইনমেন্ট শর্টহ্যান্ড) শো স্টপার are এগুলি কেবল private
কীওয়ার্ডের সাথেই ব্যবহার করা যেতে পারে এবং ব্যক্তিগত- ক্ষেত্রগুলির জন্য এগুলি বাস্তবায়নের কোনও পরিকল্পনা এখনও নেই #
।
অন্যান্য কারণ
private
কিছু ডাউন-লেভেলিং ক্ষেত্রে ভাল রান-টাইম পারফরম্যান্স সরবরাহ করতে পারে ( এখানে দেখুন )।
- টিএস-তে এখন পর্যন্ত কোনও হার্ড প্রাইভেট ক্লাসের পদ্ধতি উপলব্ধ নেই।
- কিছু লোক
private
কীওয়ার্ড স্বরলিপি পছন্দ করে like
উভয় নোট
উভয় পন্থা সংকলন সময়ে কিছু ধরণের নামমাত্র বা ব্র্যান্ডযুক্ত প্রকার তৈরি করে।
class A1 { private a = 0; }
class A2 { private a = 42; }
const a: A1 = new A2();
// error: "separate declarations of a private property 'a'"
// same with hard private fields
এছাড়াও, উভয়ই ক্রস-ইনস্ট্যান্স অ্যাক্সেসের অনুমতি দেয়: শ্রেণির একটি উদাহরণ A
অন্য A
উদাহরণগুলির ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে :
class A {
private a = 0;
method(arg: A) {
console.log(arg.a); // works
}
}
সোর্স