2016-04-15 43 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