( program: ts.Program, type: ts.ObjectType )
| 16 | } |
| 17 | |
| 18 | function getObjectTypeProperties( |
| 19 | program: ts.Program, |
| 20 | type: ts.ObjectType |
| 21 | ): { [key: string]: ts.Type } { |
| 22 | const checker = program.getTypeChecker() |
| 23 | const typeNode = checker.typeToTypeNode(type) |
| 24 | |
| 25 | const members: ts.NodeArray<ts.TypeElement> = |
| 26 | typeNode && typeNode.kind === ts.SyntaxKind.TypeLiteral |
| 27 | ? (typeNode as ts.TypeLiteralNode).members |
| 28 | : ts.createNodeArray([]) |
| 29 | |
| 30 | return type.getProperties().reduce((propertiesObject, propertySymbol) => { |
| 31 | const propTypeNode = members.find(member => getTypeElementName(member) === propertySymbol.name) |
| 32 | const propType = propTypeNode ? ((propTypeNode as any).type as ts.TypeNode) : null |
| 33 | return { |
| 34 | ...propertiesObject, |
| 35 | [propertySymbol.getName()]: propType |
| 36 | } |
| 37 | }, {}) |
| 38 | } |
| 39 | |
| 40 | export function resolvePropertyTypes( |
| 41 | program: ts.Program, |
no test coverage detected