come posso scrivere l’estensione per la classe generica in dattiloscritto come getter

così ho imparato a fare estensione nel dattiloscritto:

interface Array<T> {
  lastIndex(): number
}

Array.prototype.lastIndex = function (): number { return this.length - 1 }

ma come fare un getter da esso? ad esempio:

interface Array<T> {
  get lastIndex(): number
}

Array.prototype.lastIndex = function (): number { return this.length - 1 }

in modo che posso solo chiamare è come getter nel codice someArray.lastIndex?

ho trovato questa risposta, ma il codice non compilare per i tipi generici, anche è abbastanza brutto scrivere in questo modo, ma bene forse chiedo troppo nel dattiloscritto: come estendere una classe dattiloscritto con un ottenere proprietà?

EN From: How can I write extension for generic class in typescript as getter

More similar articles:

9 Comments

  1. come circa come questo:

    interface Array<T> {
    lastIndex(): number;
    lastValue(): T
    }

    Array.prototype.lastIndex = function (): number { return this.length - 1 };
    Array.prototype.lastValue = function (): any { return this[this.lastIndex()] };

    let myArray = ['111,', '43242asd', 'asdasdas'];
    console.log(myArray.lastValue());

  2. per quanto riguarda l’interfaccia dattiloscritto un getter è un dettaglio di esecuzione. è possibile dichiararlo come una normale proprietà readonly e implementarlo come getter.

    interface Array<T> {
      readonly lastIndex: number
    }
    
    Object.defineProperty(Array.prototype, "lastIndex", {
      get: function () { return this.length - 1  }
    });

    usando la sintassi della stenografia ES6,

    Object.defineProperty(Array.prototype, "lastIndex", {
      get() { return this.length - 1  }
    });
    1. questa è la risposta corretta. tuttavia potreste notare che i globals aumentanti dovrebbero essere evitati

    2. certo, è un parere, ma è ampiamente tenuto per buona ragione. tutto quello che dovete fare è considerare cosa accadrebbe se una delle vostre dipendenze facesse la stessa cosa per vedere dove si verifica il problema. tale codice può essere in conflitto con future aggiunte alla lingua stessa. se stai scrivendo un’applicazione allora è una decisione discutibile, se si sta scrivendo una libreria allora è una decisione assolutamente terribile. inoltre, ho votato per la vostra risposta anche per ragioni opinionate.

    3. sì, gli autori delle librerie non hanno alcun diritto di modificare i globali in quanto le librerie sono destinate al consumo di terze parti. ma come autori di codice applicativo, Non vedo alcun problema nel modificare l’ambito globale come parte di bootstrap applicazione. pensi davvero che ci sarà un’aggiunta di lingua chiamata array.lastIndex che fa qualcosa di diverso da ottenere l’ultimo indice dell’array? aggiungere un globale è una decisione esecutiva intelligente che deve essere presa solo dal CTO / lead in un modo che influenza l’intera base di codice. non ogni volta che uno sviluppatore vuole un metodo di utilità.

Leave a Reply

Your email address will not be published. Required fields are marked *