2015-04-12 121 views
3

我正在尋找一些關於如何正確處理這種情況的建議。TypeScript聲明擴展類與靜態方法。

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; 

} 

在這種情況下,我得到以下錯誤:

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'. 

我真的不能明白的方式來解決問題,或者,它是從什麼不同的行爲,我會期待。

我怎麼能幹淨地解決這個簽名?

回答

2

How could I cleanly solve this signature

乾淨但可以用函數重載來完成。例如:

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; 
} 
+0

再次感謝@basarat – Clark