2016-04-15 44 views
1

我不断收到不相容以下错误:打字稿无效超载签名 - 与实施

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

为下面的代码:

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; 

我看不出有什么不对的功能型重载以上。我试图逐个删除函数签名(并根据类型),但我失败了 - 我实现了一个空函数。

codeis的逻辑很好(所有测试都通过),只是重载无效。

这个问题与this one

+0

@CoreyAlix所以我应该怎么解决呢? – ducin

回答

0

没有错误的所有作品,我在操场打字稿:

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

我的代码也适用于打字游乐场。但是我的电脑上的编译器会引发这个错误... – ducin

+0

什么版本的tsc? –

+1

打字稿“1.8.9” – ducin