@@ -2258,13 +2258,16 @@ func (p *Printer) emitTypeNode(node *ast.TypeNode, precedence ast.TypePrecedence
2258
2258
// !!! Should this actually be considered a type?
2259
2259
p .emitExpressionWithTypeArguments (node .AsExpressionWithTypeArguments ())
2260
2260
2261
- case ast .KindJSDocAllType ,
2262
- ast .KindJSDocNullableType ,
2263
- ast .KindJSDocNonNullableType ,
2264
- ast .KindJSDocOptionalType ,
2265
- ast .KindJSDocVariadicType :
2266
- // TODO
2267
- panic ("not implemented" )
2261
+ case ast .KindJSDocAllType :
2262
+ p .emitJSDocAllType (node )
2263
+ case ast .KindJSDocNonNullableType :
2264
+ p .emitJSDocNonNullableType (node .AsJSDocNonNullableType ())
2265
+ case ast .KindJSDocNullableType :
2266
+ p .emitJSDocNullableType (node .AsJSDocNullableType ())
2267
+ case ast .KindJSDocOptionalType :
2268
+ p .emitJSDocOptionalType (node .AsJSDocOptionalType ())
2269
+ case ast .KindJSDocVariadicType :
2270
+ p .emitJSDocVariadicType (node .AsJSDocVariadicType ())
2268
2271
2269
2272
default :
2270
2273
panic (fmt .Sprintf ("unhandled TypeNode: %v" , node .Kind ))
@@ -2317,6 +2320,38 @@ func (p *Printer) emitBindingElementNode(node *ast.BindingElementNode) {
2317
2320
p .emitBindingElement (node .AsBindingElement ())
2318
2321
}
2319
2322
2323
+ func (p * Printer ) emitJSDocAllType (node * ast.Node ) {
2324
+ p .emitKeywordNode (node )
2325
+ }
2326
+
2327
+ func (p * Printer ) emitJSDocNonNullableType (node * ast.JSDocNonNullableType ) {
2328
+ state := p .enterNode (node .AsNode ())
2329
+ p .writePunctuation ("!" )
2330
+ p .emitTypeNode (node .Type , ast .TypePrecedenceNonArray )
2331
+ p .exitNode (node .AsNode (), state )
2332
+ }
2333
+
2334
+ func (p * Printer ) emitJSDocNullableType (node * ast.JSDocNullableType ) {
2335
+ state := p .enterNode (node .AsNode ())
2336
+ p .writePunctuation ("?" )
2337
+ p .emitTypeNode (node .Type , ast .TypePrecedenceNonArray )
2338
+ p .exitNode (node .AsNode (), state )
2339
+ }
2340
+
2341
+ func (p * Printer ) emitJSDocOptionalType (node * ast.JSDocOptionalType ) {
2342
+ state := p .enterNode (node .AsNode ())
2343
+ p .emitTypeNode (node .Type , ast .TypePrecedenceJSDoc )
2344
+ p .writePunctuation ("=" )
2345
+ p .exitNode (node .AsNode (), state )
2346
+ }
2347
+
2348
+ func (p * Printer ) emitJSDocVariadicType (node * ast.JSDocVariadicType ) {
2349
+ state := p .enterNode (node .AsNode ())
2350
+ p .writePunctuation ("..." )
2351
+ p .emitTypeNode (node .Type , ast .TypePrecedenceJSDoc )
2352
+ p .exitNode (node .AsNode (), state )
2353
+ }
2354
+
2320
2355
//
2321
2356
// Expressions
2322
2357
//
0 commit comments