Búsqueda de sitios web

typescript - ¿Cómo definir una función constructora (patrón de prototipo) en TS? Esto tiene tipo any


Me he topado con algo aparentemente simple que no sé cómo arreglar. Quiero usar una función constructora simple (no una clase):

const Person = function() {
    this.name = 'John'
}

El compilador de TS dice:

‘this’ tiene implícitamente el tipo ‘any’ porque no tiene una anotación de tipo.

Pero no estoy seguro de cómo puedo establecer el tipo de this explícitamente en este caso.

Respuesta #1

Puedes especificar el tipo de this de una función usando un parámetro falso this como se explica aquí. Pero esto no es suficiente, ya que también quieres que esta función pueda ser instanciada. La aserción de tipos puede ayudar aquí:

interface Person {
  name: string
}

interface PersonConstructor {
  new(): Person;
};

const Person = function(this: Person) {
    this.name = 'John'
} as any as PersonConstructor;

const p = new Person();

Lo anterior está permitido debido a la fusión de declaraciones, por lo que Person es tanto tipo/forma como valor/constructor.

Parque infantil

Artículos relacionados