Gruparea metodelor clasei în Typescript/JavaScript


Bună, vreau să realizez ceva de genul acesta în TypeScript/JavaScript

const foo = new something();
foo.group.method();

Am încercat deja să folosesc obiecte și funcționează foarte bine, dar mă întrebam dacă acesta este cel mai bun mod de a realiza acest lucru sau nu
Codul meu:

class something{
    someMethod(){
       //do something
    } 
    group:{
       doSomething:()=>{
          //my grouped method
       }
    }

}

Răspuns #1

Dacă trebuie să ai abilitatea de a apela foo.group.method(), atunci nu ai altă opțiune decât să construiești obiectul group cu metodele lui asociate atunci când creezi un something, cel mai logic fiind să faci acest lucru în constructorul lui something. Nu există cu adevărat nicio sintaxă alternativă care să-ți permită să grupezi metodele fără ca acestea să împărtășească un obiect. Chiar și namespace-urile din TypeScript (un caz de utilizare diferit, dar cu o intenție similară de grupare logică) folosesc de fapt obiecte în fundal, pentru că asta este tot ce are JavaScript. Aș sugera că, dacă scopul este doar gruparea logică, probabil că nu ar trebui să o faci, pentru că este neconvențional și probabil creează mai multe complicații decât merită, dar, desigur, cazul tău de utilizare poate dicta altfel.

Răspunsul #2

Un mod de a face acest lucru ar fi să folosești module și apoi să configurezi exporturile modulelor într-un mod care are sens. Folosind CommonJS, ar fi ceva de genul acesta:

someMethod() {}
doSomething() {}

module.exports = {
  someMethod,
  group: {
    doSomething
  }
}

Editare: De asemenea, a pune subclase ca proprietăți statice ar putea fi ceva ce te interesează.