TypeScript-deklaration som utökar klass med statisk metod
Jag letar efter råd om hur jag ska hantera den här situationen på rätt sätt.
Jag har something.d.ts
export class Sprite {
static fromFrame(frameId: string): Sprite;
static fromImage(imageId: string, crossorigin?: boolean, scaleMode?: number): Sprite;
}
export class TilingSprite extends Sprite {
static fromFrame(frameId: string, width?: number, height?: number): TilingSprite;
static fromImage(imageId: string, width?: number, height?: number, crossorigin?: boolean, scaleMode?: number): TilingSprite;
}
I detta fall får jag följande fel:
Error 40 Class static side 'typeof TilingSprite' incorrectly extends base class static side 'typeof Sprite'. Types of property 'fromImage' are incompatible.
Type '(imageId: string, width?: number, height?: number, crossorigin?: boolean, scaleMode?: number) => ...' is not assignable to type '(imageId: string, crossorigin?: boolean, scaleMode?: number)
=> Sprite'.
Types of parameters 'width' and 'crossorigin' are incompatible.
Type 'number' is not assignable to type 'boolean'.
Jag kan verkligen inte se något sätt att lösa problemet, eller så är det ett annat beteende än vad jag skulle förvänta mig.
Hur skulle jag kunna lösa denna signatur på ett rent sätt?
Svar #1
Hur kunde jag lösa denna signatur på ett rent sätt
Inte rent men kan göras med funktionsöverlagring. t.ex.:
declare class Sprite {
static fromImage(imageId: string, crossorigin?: boolean, scaleMode?: number): Sprite;
}
declare class TilingSprite extends Sprite {
static fromImage(imageId: string, crossorigin?: boolean, scaleMode?: number): Sprite;
static fromImage(imageId: string, width?: number, height?: number, crossorigin?: boolean, scaleMode?: number): TilingSprite;
}
