Merge pull request #514 from Microsoft/overloadSignatureDeclaration

Correct the declaration emit for overload implementation if there is single overload signature
This commit is contained in:
Sheetal Nandi 2014-08-29 14:33:53 -07:00
commit b514fa58a9
4 changed files with 41 additions and 1 deletions

View File

@ -7096,7 +7096,20 @@ module ts {
function isImplementationOfOverload(node: FunctionDeclaration) {
if (node.body) {
var symbol = getSymbolOfNode(node);
return getSignaturesOfSymbol(symbol).length > 1;
var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
// If this function body corresponds to function with multiple signature, it is implementation of overload
// eg: function foo(a: string): string;
// function foo(a: number): number;
// function foo(a: any) { // This is implementation of the overloads
// return a;
// }
return signaturesOfSymbol.length > 1 ||
// If there is single signature for the symbol, it is overload if that signature isnt coming from the node
// eg: function foo(a: string): string;
// function foo(a: any) { // This is implementation of the overloads
// return a;
// }
(signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
}
return false;
}

View File

@ -21,6 +21,11 @@ export function fooWithOverloads(a: any): any {
return a;
}
export function fooWithSingleOverload(a: string): string;
export function fooWithSingleOverload(a: any) {
return a;
}
/** This comment should appear for nonExportedFoo*/
function nonExportedFoo() {
}
@ -83,6 +88,10 @@ function fooWithOverloads(a) {
return a;
}
exports.fooWithOverloads = fooWithOverloads;
function fooWithSingleOverload(a) {
return a;
}
exports.fooWithSingleOverload = fooWithSingleOverload;
/** This comment should appear for nonExportedFoo*/
function nonExportedFoo() {
}
@ -134,6 +143,7 @@ export declare function fooWithParameters(/** this is comment about a*/ a: strin
export declare function fooWithRestParameters(a: string, ...rests: string[]): string;
export declare function fooWithOverloads(a: string): string;
export declare function fooWithOverloads(a: number): number;
export declare function fooWithSingleOverload(a: string): string;
//// [declFileFunctions_1.d.ts]
/** This comment should appear for foo*/
declare function globalfoo(): void;

View File

@ -47,6 +47,18 @@ export function fooWithOverloads(a: any): any {
>a : any
}
export function fooWithSingleOverload(a: string): string;
>fooWithSingleOverload : (a: string) => string
>a : string
export function fooWithSingleOverload(a: any) {
>fooWithSingleOverload : (a: string) => string
>a : any
return a;
>a : any
}
/** This comment should appear for nonExportedFoo*/
function nonExportedFoo() {
>nonExportedFoo : () => void

View File

@ -23,6 +23,11 @@ export function fooWithOverloads(a: any): any {
return a;
}
export function fooWithSingleOverload(a: string): string;
export function fooWithSingleOverload(a: any) {
return a;
}
/** This comment should appear for nonExportedFoo*/
function nonExportedFoo() {
}