( node: ts.TypeElement | ts.ClassElement, references: AST.TypeReferences, )
| 404 | } |
| 405 | |
| 406 | function parsePropertyLike( |
| 407 | node: ts.TypeElement | ts.ClassElement, |
| 408 | references: AST.TypeReferences, |
| 409 | ): AST.PropertyLikeDeclaration { |
| 410 | const memberName = node.name && getIdentifierString(node.name); |
| 411 | const isOptional = !!(node as ts.TypeElement)?.questionToken; |
| 412 | |
| 413 | let type: AST.Type; |
| 414 | |
| 415 | if (ts.isPropertySignature(node) || ts.isPropertyDeclaration(node)) { |
| 416 | type = parseType(node.type, references); |
| 417 | } else if ( |
| 418 | ts.isMethodSignature(node) || |
| 419 | ts.isMethodDeclaration(node) || |
| 420 | ts.isGetAccessor(node) || |
| 421 | ts.isGetAccessorDeclaration(node) |
| 422 | ) { |
| 423 | const functionType = parseFunctionType(node, references); |
| 424 | type = { |
| 425 | name: 'function', |
| 426 | function: functionType, |
| 427 | }; |
| 428 | } else { |
| 429 | throw new Error(`Could not resolve kind ${getNodeDebugDescription(node)}`); |
| 430 | } |
| 431 | |
| 432 | const result: AST.PropertyLikeDeclaration = { |
| 433 | start: node.getStart(), |
| 434 | end: node.getEnd(), |
| 435 | isOptional, |
| 436 | name: memberName ?? '', |
| 437 | type, |
| 438 | leadingComments: getNodeComments(node), |
| 439 | }; |
| 440 | |
| 441 | return result; |
| 442 | } |
| 443 | |
| 444 | export interface DumpedRootNode { |
| 445 | nodeType: 'enum' | 'function' | 'interface' | 'variable' | 'exportedTypeAlias'; |
no test coverage detected