2016-04-15 2 views
1

ich immer folgende Fehler bekommen:Typoskript ungültig Überlastung Signaturen - unvereinbar mit der Umsetzung

error TS2394: Overload signature is not compatible with function implementation. 

für folgenden Code:

import Registry = require('../class/Registry'); 

type Format = Function; 

type FormatRegistry = { 
    [s: string]: Format; 
} 

var registry = new Registry<Format>(); 

function formatAPI(): FormatRegistry; // get all formats // HERE GOES THE COMPILER ERROR 
function formatAPI(name: string): Format; // get format 
function formatAPI(name: string, format: Format): void; // register format 
function formatAPI(formatMap: FormatRegistry): void; // register many formats 
function formatAPI(nameOrMap?: string|FormatRegistry, callback?: Format): FormatRegistry|Format|void { 
    if (typeof nameOrMap === 'object') { 
    registry.registerMany(nameOrMap); 
    } else if (typeof nameOrMap === 'string') { 
    if (callback) { 
     registry.register(nameOrMap, callback); 
    } else { 
     return registry.get(nameOrMap); 
    } 
    } else { 
    return registry.list(); 
    } 
} 

export = formatAPI; 

Ich kann nicht sehen, was in dem Funktionstyp falsch ist Überlastung oben. Ich habe versucht, Funktionssignaturen (und entsprechende Typen) Stück für Stück zu entfernen, aber ich habe versagt - ich habe eine leere Funktion erreicht.

Die Logik hinter dem Code ist in Ordnung (alle Tests bestehen), nur die Überladungen sind irgendwie ungültig.

Diese Frage bezieht sich auf this one.

+0

@CoreyAlix so, wie soll ich das Problem beheben? – ducin

Antwort

0

Das alles funktioniert ohne Fehler für mich im Typoskript Spielplatz:

class Registry<T> { 
    registerMany(items: FormatRegistry) { } 
    register(name: string, cb: Format) { } 
    get(name: string) { } 
    list() { } 
} 

type Format = Function; 

type FormatRegistry = { 
    [s: string]: Format; 
} 

var registry = new Registry<Format>(); 

function formatAPI(): FormatRegistry; // get all formats // HERE GOES THE COMPILER ERROR 
function formatAPI(name: string): Format; // get format 
function formatAPI(name: string, format: Format): void; // register format 
function formatAPI(formatMap: FormatRegistry): void; // register many formats 
function formatAPI(nameOrMap?: string|FormatRegistry, callback?: Format): FormatRegistry|Format|void { 
    if (typeof nameOrMap === 'object') { 
    registry.registerMany(nameOrMap); 
    } else if (typeof nameOrMap === 'string') { 
    if (callback) { 
     registry.register(nameOrMap, callback); 
    } else { 
     return registry.get(nameOrMap); 
    } 
    } else { 
    return registry.list(); 
    } 
} 

export = formatAPI; 
+0

Mein Code funktioniert auch in typescript playground. Aber der Compiler auf meinem Computer wirft diesen Fehler ... – ducin

+0

Welche Version von TSC? –

+1

Typoskript "1.8.9" – ducin

Verwandte Themen