2015-04-12 56 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