@@ -43,7 +43,7 @@ func (p *Parser) reparseTags(parent *ast.Node, jsDoc []*ast.Node) {
43
43
if tags == nil {
44
44
continue
45
45
}
46
- for _ , tag := range j . AsJSDoc (). Tags .Nodes {
46
+ for _ , tag := range tags .Nodes {
47
47
switch tag .Kind {
48
48
case ast .KindJSDocTypedefTag :
49
49
// !!! Don't mark typedefs as exported if they are not in a module
@@ -67,7 +67,14 @@ func (p *Parser) reparseTags(parent *ast.Node, jsDoc []*ast.Node) {
67
67
case ast .KindJSDocTypeLiteral :
68
68
members := p .nodeSlicePool .NewSlice (0 )
69
69
for _ , member := range typeExpression .AsJSDocTypeLiteral ().JSDocPropertyTags {
70
- prop := p .factory .NewPropertySignatureDeclaration (nil , member .Name (), nil /*postfixToken*/ , member .Type (), nil /*initializer*/ )
70
+ var questionToken * ast.TokenNode
71
+ if member .AsJSDocPropertyTag ().IsBracketed ||
72
+ member .AsJSDocPropertyTag ().TypeExpression != nil && member .AsJSDocPropertyTag ().TypeExpression .Type ().Kind == ast .KindJSDocOptionalType {
73
+ questionToken = p .factory .NewToken (ast .KindQuestionToken )
74
+ questionToken .Loc = core .NewTextRange (member .Pos (), member .End ())
75
+ questionToken .Flags = p .contextFlags | ast .NodeFlagsReparsed
76
+ }
77
+ prop := p .factory .NewPropertySignatureDeclaration (nil , member .Name (), questionToken , member .Type (), nil /*initializer*/ )
71
78
prop .Loc = member .Loc
72
79
prop .Flags = p .contextFlags | ast .NodeFlagsReparsed
73
80
members = append (members , prop )
0 commit comments