typescript - Definiera konstruktörsfunktion (prototypmönster) i TS? Detta har typen any


Jag har snubblat över något som verkar enkelt som jag inte vet hur man fixar. Jag vill använda en enkel konstruktionsfunktion (inte en klass):

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

TS-kompilatorn säger:

'this' har implicit typen 'any' eftersom det inte har någon typannotering.

Men jag är inte säker på hur jag kan ange typen för this explicit i det här fallet?

Svar #1

Du kan specificera funktionens this-typ genom att använda en falsk this-parameter som förklaras här. Men detta räcker inte eftersom du också vill att denna funktion ska kunna skapas med new. Typpåstående kan hjälpa här:

interface Person {
  name: string
}

interface PersonConstructor {
  new(): Person;
};

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

const p = new Person();

Ovanstående är tillåtet på grund av deklarationssammanfogning, så Person är både typ/form och även värde/konstruktör.

Lekplats

Relaterade artiklar