Ich habe ein Projekt in Typescript 2.0 und ich verwende es6
als mein Modul, mit der Lib es2017
enthalten, so dass ich Karten verwenden kann. Ich habe alles in Ordnung, außer dass ich unnötige Zaubersprüche brauche.Verwendung von Generics in es6 Karte mit Typescript
static readonly gameStateMap: Map<GameState, Phaser.State> = new Map([
[GameState.PONG, new PongState() as Phaser.State],
[GameState.BREAKOUT, new BreakoutState() as Phaser.State]
]);
Warum muss ich sie Phaser.State
werfen? Da sie beide direkt erweitern Phaser.State
Ich dachte, ich sollte in der Lage sein, sie einfach in der Karte ohne Probleme zu haften.
Ich dachte, vielleicht brauchte nur ich meine Generika Erklärung zu verfeinern, so dass ich versuchte:
Map<GameState, V extends Phaser.State>
.
Ich sehe diese Syntax in Typescript's generics docs verwendet.
Aber es funktioniert nicht. Ist das ein ES6 Generic und das ist mein Problem? Wie kann ich das beheben, um nicht zu casten?
Dieses Problem tritt auch nur auf, wenn die fraglichen Klassen unterschiedliche Eigenschaften haben. Der Fehler ist:
error TS2345: Argument of type '((GameState | PongState)[] | (GameState | BreakoutState)[])[]' is not assignable to parameter of type 'Iterable<[GameState, State]>'.
Ich spielte mit dem Spielplatz zu machen Es ähnelt mehr meinem Code und konnte das Problem neu erstellen, indem ich die Klassendeklarationen folgendermaßen ändere: 'Klasse PongState implementiert Phaser.State {stuff: string; } '' Klasse BreakoutState implementiert Phaser.State {notStuff: number; } '. Es scheint, das Problem tritt nur auf, wenn die Klassen unterschiedliche Eigenschaften enthalten. – CorayThan