2015-08-25 13 views
9

Ist es möglich, diese spezialisierte Überladung zu definieren, ohne die Signatur einzuführen, die genau der Implementierung entspricht?Typoskript "spezialisiert" überladen

on(eventName: string, cb: Function); 
on(eventName: "view", cb: (args: { 
    foo: { 
    } 
}) => void); 
on(eventName: string, cb: Function) { 
} 

Wenn ich es entfernen erhalte ich diesen Fehler:

Specialized overload signature is not assignable to any non-specialized signature.

Antwort

8

Specialized Überlastungen sind eine Spezialisierung von einer der anderen Überlastung Signaturen (die Implementierung Unterschrift nicht sichtbar ist, zählt also nicht).

Wenn Sie eine spezielle Überladung verwenden, muss mindestens eine nicht spezialisierte Signatur vorhanden sein, die die spezialisierte Version "speziell" macht.

Der Rückgabetyp der spezialisierten Signatur muss ein Untertyp der nicht spezialisierten Signatur sein.

Kurz gesagt, Sie müssen die Überlastung haben, auch wenn es identisch mit der Implementierung Signatur ist.