2016-04-15 11 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; 

を私は上記のオーバーロード関数型で間違っているものを見ることができません。私は関数シグネチャ(とタイプに応じて)を1つずつ削除しようとしましたが、失敗しました - 空の関数を達成しました。

コードの背後にあるロジックは問題ありません(すべてのテストに合格します)、オーバーロードは何とか無効です。

この質問は、this oneに関連しています。

+0

@CoreyAlixので、どのように私はそれを修正する必要がありますか? – ducin

答えて

0

このtypescriptです遊び場で私のためにエラーなしですべての作品:

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

typescript "1.8.9" – ducin