scrivere un metodo generico di clone nel dattiloscritto

nel dattiloscritto, c’è un modo per una classe di riferirsi al suo costruttore in un modo che funziona quando è sottoclassificata?

abstract class Base<T> {
  constructor(readonly value: T) {}

  abstract getName(): string;

  clone() {
    const Cls = this.constructor;
    return new Cls(this.value);
  }
}

in questo frammento, Cls viene dato il tipo Function e così il compilatore lamenta che: “non può usare ‘new’ con un’espressione il cui tipo manca di una chiamata o di una firma di costrutto.”

EN From: Writing a generic clone method in TypeScript

More similar articles:

1 Comment

  1. dattiloscritto non utilizza un tipo rigoroso per il costruttore (usa solo Function) e poiché questo non è un costruttore, non è chiamabile con new.

    la soluzione semplice è usare una asserzione di tipo:

    abstract class Base<T> {
        constructor(readonly value: T) { }
    
        abstract getName(): string;
    
        clone() {
            // Using polymorphic this ensures the return type is correct in derived  types
            const Cls = this.constructor as new (value: T) => this;
            return new Cls(this.value);
        }
    }

Leave a Reply

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