@@ -4946,12 +4946,26 @@ module ts {
4946
4946
return ;
4947
4947
}
4948
4948
4949
+ var symbol = getSymbolOfNode ( signatureDeclarationNode ) ;
4949
4950
// TypeScript 1.0 spec (April 2014): 3.7.2.4
4950
4951
// Every specialized call or construct signature in an object type must be assignable
4951
4952
// to at least one non-specialized call or construct signature in the same object type
4952
- var signaturesOfSymbol = getSignaturesOfSymbol ( getSymbolOfNode ( signatureDeclarationNode ) ) ;
4953
- for ( var i = 0 ; i < signaturesOfSymbol . length ; i ++ ) {
4954
- var otherSignature = signaturesOfSymbol [ i ] ;
4953
+ var signaturesToCheck : Signature [ ] ;
4954
+ // Unnamed (call\construct) signatures in interfaces are inherited and not shadowed so examining just node symbol won't give complete answer.
4955
+ // Use declaring type to obtain full list of signatures.
4956
+ if ( ! signatureDeclarationNode . name && signatureDeclarationNode . parent && signatureDeclarationNode . parent . kind === SyntaxKind . InterfaceDeclaration ) {
4957
+ Debug . assert ( signatureDeclarationNode . kind === SyntaxKind . CallSignature || signatureDeclarationNode . kind === SyntaxKind . ConstructSignature ) ;
4958
+ var signatureKind = signatureDeclarationNode . kind === SyntaxKind . CallSignature ? SignatureKind . Call : SignatureKind . Construct ;
4959
+ var containingSymbol = getSymbolOfNode ( signatureDeclarationNode . parent ) ;
4960
+ var containingType = getDeclaredTypeOfSymbol ( containingSymbol ) ;
4961
+ signaturesToCheck = getSignaturesOfType ( containingType , signatureKind ) ;
4962
+ }
4963
+ else {
4964
+ signaturesToCheck = getSignaturesOfSymbol ( getSymbolOfNode ( signatureDeclarationNode ) ) ;
4965
+ }
4966
+
4967
+ for ( var i = 0 ; i < signaturesToCheck . length ; i ++ ) {
4968
+ var otherSignature = signaturesToCheck [ i ] ;
4955
4969
if ( ! otherSignature . hasStringLiterals && isSignatureAssignableTo ( signature , otherSignature ) ) {
4956
4970
return ;
4957
4971
}
0 commit comments