microsoft / microsoft/TypeScript

TypeScript right adapt constructor

Aperta
#57,812 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Needs More Info
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔍 Search Terms

I have implemented a function JavaAdapter to inherit classes and return instantiated objects. Now I'm creating a declaration for it.

type ProxyMethods<T extends object> = { [K in keyof T]?: T[K] } | {};

declare function JavaAdapter<T, K extends ProxyMethods<T>, Args>(
  className: new (...args: Args) => T,
  override: K,
  ...args: Args
): K & T;

In most cases, it works fine. However, when the inherited object has multiple constructor functions with different parameter counts, it cannot accurately match, for example:

JavaAdapter(
  android.widget.Button,
  {
    setOnClickListener(view) {
      console.log(view);
    },
  },
  activity,
  // new android.util.AttributeSet()
);

This usage is correct and matches one of the constructor functions, but TypeScript prompts "Expected 4 arguments, but got 3." It works only when I add new android.util.AttributeSet(). The partial declaration of android.widget.Button is as follows:

declare module android {
  export module widget {
    class Button {
      public setOnClickListener(view: this): void;
      public constructor(context: android.content.Context);
      public constructor(context: android.content.Context, attribute: android.util.AttributeSet);
    }
  }
}

Besides changing to constructor(context: android.content.Context, attribute?: android.util.AttributeSet);, can TypeScript better adapt?

✅ Viability Checklist
⭐ Suggestion

TypeScript matches correctly based on parameters

📃 Motivating Example

Enhance the user experience of typescript

💻 Use Cases
  1. What do you want to use this for?
  2. What shortcomings exist with current approaches?
  3. What workarounds are you using in the meantime?

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

L’issue non fornisce alcun file del repository né un punto di ingresso per i test; inizia riproducendo la chiamata a JavaAdapter con i costruttori overloaded di android.widget.Button mostrati nell’esempio. Confronta il numero di argomenti accettati e rifiutati, quindi definisci un comportamento atteso mirato per l’adattamento degli overload e aggiungi un test di regressione che dimostri cosa dovrebbe essere considerato completato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.