আপনি কি টাইপস্ক্রিপ্টে নেস্টেড ক্লাস তৈরি করতে পারবেন?


93

টাইপস্ক্রিপ্টে নেস্ট ক্লাস করার কোনও উপায় আছে কি? যেমন আমি এগুলি তাদের মতো ব্যবহার করতে চাই:

var foo = new Foo();
var bar = new Foo.Bar();

উত্তর:


132

টাইপস্ক্রিপ্ট 1.6 দিয়ে শুরু করে আমাদের ক্লাস এক্সপ্রেশন ( রেফারেন্স ) রয়েছে।

এর অর্থ আপনি নিম্নলিখিতটি করতে পারেন:

class Foo {
    static Bar = class {

    }
}

// works!
var foo = new Foo();
var bar = new Foo.Bar();

4
এই উদাহরণটি টাইপস্ক্রিপ্ট ১.6.৩ এ কাজ করে না: ত্রুটি TS4028 রফতানি শ্রেণীর পাবলিক স্ট্যাটিক সম্পত্তি 'বার' এর ব্যক্তিগত নাম রয়েছে (অজ্ঞাতনামা শ্রেণি) 'or
সের্গেই

4
@ সেরজে আমার একই সমস্যা ছিল তাই নীচের আমার উত্তর অনুসারে নেমস্পেসগুলি ব্যবহার করা শুরু করলাম।
ড্যান ডেফ

কোনও শ্রেণীর অভ্যন্তরে ইন্টারফেস তৈরির উপায় আছে কি? অর্থাত্ যদি আমরা চাই যে বারটি একটি ইন্টারফেস হবে
RoG

@ লিট্টা হার্ভি - একটি ব্যবহারের ক্ষেত্রে একটি বাহ্যিক ইন্টারফেসের একটি বেসরকারী বাস্তবায়ন ফিরে আসবে, উদাহরণস্বরূপ, একটি কারখানা পদ্ধতি। জাভা (এবং অন্যদের) এর অন্য উদাহরণ হ'ল পুনরাবৃত্তকারীরা যা তাদের ধারণক্ষম শ্রেণীর সদস্য ভেরিয়েবলগুলিতে বিশেষভাবে অ্যাক্সেসের প্রয়োজন এবং স্কোপিং বিধিগুলির মাধ্যমে স্বয়ংক্রিয়ভাবে এটি করে, তবে আপনি কখনই এগুলি সরাসরি রফতানি এবং তাত্ক্ষণিকভাবে চান না।
ডেভ

35

ক্লাস এক্সপ্রেশন ব্যবহার করে এখানে আরও জটিল ব্যবহারের মামলা রয়েছে ।

এটি অভ্যন্তরীণ শ্রেণিকে বাইরের শ্রেণীরprivate সদস্যদের অ্যাক্সেস করার অনুমতি দেয়

class classX { 
    private y: number = 0; 

    public getY(): number { return this.y; }

    public utilities = new class {
        constructor(public superThis: classX) {
        }
        public testSetOuterPrivate(target: number) {
            this.superThis.y = target;
        }
    }(this);    
}

const x1: classX = new classX();
alert(x1.getY());

x1.utilities.testSetOuterPrivate(4);
alert(x1.getY());

কোডপেন


4
@ রায়ানক্যাভনফো কোনও "অভ্যন্তরীণ" শ্রেণীর অভিব্যক্তিটির ভিতরে ব্যক্তিগত সদস্যদের অ্যাক্সেস করার ক্ষমতা কি একটি বাগ?
বিনিল্যান্ড

4
আমি যাচাই করেছি এটি টাইপস্ক্রিপ্ট দলের সাথে সঠিক ব্যবহার। github.com/Mic Microsoft
TypeScript/

4
এটি সরাসরি পাস না করে পিতামাতার প্রসঙ্গে অ্যাক্সেস করা সম্ভব?
shabunc

@ শ্যাবঙ্ক আমার জ্ঞানের দিকে না
বনিলেন্ড

19

সংকলন ত্রুটি না পেয়ে আমি রফতানি ক্লাসগুলির সাথে এটি কাজ করতে পারি না, পরিবর্তে আমি নেমস্পেস ব্যবহার করেছি :

namespace MyNamespace {
    export class Foo { }
}

namespace MyNamespace.Foo {
    export class Bar { }
}

একই। 'ফু' কেবল একটি প্রকারকেই বোঝায় তবে এখানে নামস্থান হিসাবে ব্যবহৃত হচ্ছে।
উইল Beason

12

আপনি যদি কোনও প্রকারের ঘোষণা ফাইলের প্রসঙ্গে থাকেন তবে আপনি ক্লাস এবং নেমস্পেসগুলি মিশ্রিত করে এটি করতে পারেন:

// foo.d.ts
declare class Foo {
  constructor();
  fooMethod(): any;
}

declare namespace Foo {
  class Bar {
    constructor();
    barMethod(): any;
  }
}

// ...elsewhere
const foo = new Foo();
const bar = new Foo.Bar();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.