@@ -67,6 +67,7 @@ namespace ts.codefix {
6767 const visibilityModifier = createVisibilityModifier ( getModifierFlags ( declaration ) ) ;
6868 const modifiers = visibilityModifier ? createNodeArray ( [ visibilityModifier ] ) : undefined ;
6969 const type = checker . getWidenedType ( checker . getTypeOfSymbolAtLocation ( symbol , enclosingDeclaration ) ) ;
70+ const optional = ! ! ( symbol . flags & SymbolFlags . Optional ) ;
7071
7172 switch ( declaration . kind ) {
7273 case SyntaxKind . GetAccessor :
@@ -78,7 +79,7 @@ namespace ts.codefix {
7879 /*decorators*/ undefined ,
7980 modifiers ,
8081 name ,
81- /*questionToken*/ undefined ,
82+ optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ,
8283 typeNode ,
8384 /*initializer*/ undefined ) ;
8485 return property ;
@@ -96,36 +97,27 @@ namespace ts.codefix {
9697 return undefined ;
9798 }
9899
99- const optional = ! ! ( symbol . flags & SymbolFlags . Optional ) ;
100100 if ( declarations . length === 1 ) {
101101 Debug . assert ( signatures . length === 1 ) ;
102102 const signature = signatures [ 0 ] ;
103- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
104- signatureDeclaration . modifiers = modifiers ;
105- signatureDeclaration . name = name ;
106- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
107- signatureDeclaration . body = createStubbedMethodBody ( ) ;
108- return signatureDeclaration ;
103+ return signatureToMethodDeclaration ( signature , enclosingDeclaration , createStubbedMethodBody ( ) ) ;
109104 }
110105
111106 const signatureDeclarations = [ ] ;
112107 for ( let i = 0 ; i < signatures . length ; i ++ ) {
113108 const signature = signatures [ i ] ;
114- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
115- signatureDeclaration . modifiers = modifiers ;
116- signatureDeclaration . name = name ;
117- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
118- signatureDeclarations . push ( signatureDeclaration ) ;
109+ const methodDeclaration = signatureToMethodDeclaration ( signature , enclosingDeclaration ) ;
110+ if ( methodDeclaration ) {
111+ signatureDeclarations . push ( methodDeclaration ) ;
112+ }
119113 }
120114
121115 if ( declarations . length > signatures . length ) {
122116 const signature = checker . getSignatureFromDeclaration ( declarations [ declarations . length - 1 ] as SignatureDeclaration ) ;
123- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
124- signatureDeclaration . modifiers = modifiers ;
125- signatureDeclaration . name = name ;
126- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
127- signatureDeclaration . body = createStubbedMethodBody ( ) ;
128- signatureDeclarations . push ( signatureDeclaration ) ;
117+ const methodDeclaration = signatureToMethodDeclaration ( signature , enclosingDeclaration , createStubbedMethodBody ( ) ) ;
118+ if ( methodDeclaration ) {
119+ signatureDeclarations . push ( methodDeclaration ) ;
120+ }
129121 }
130122 else {
131123 Debug . assert ( declarations . length === signatures . length ) ;
@@ -136,6 +128,17 @@ namespace ts.codefix {
136128 default :
137129 return undefined ;
138130 }
131+
132+ function signatureToMethodDeclaration ( signature : Signature , enclosingDeclaration : Node , body ?: Block ) {
133+ const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
134+ if ( signatureDeclaration ) {
135+ signatureDeclaration . modifiers = modifiers ;
136+ signatureDeclaration . name = name ;
137+ signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
138+ signatureDeclaration . body = body ;
139+ }
140+ return signatureDeclaration ;
141+ }
139142 }
140143
141144 function createMethodImplementingSignatures ( signatures : Signature [ ] , name : PropertyName , optional : boolean , modifiers : Modifier [ ] | undefined ) : MethodDeclaration {
0 commit comments