private static Node GetObjectLiteralType(ObjectLiteralExpression objectLiteral) { Node type = GetDeclarationType(objectLiteral); if (type != null) { return(type); } List <Node> properties = objectLiteral.Properties; if (properties.Count == 0) { TypeLiteral typeLiteral = NodeHelper.CreateNode(NodeKind.TypeLiteral) as TypeLiteral; typeLiteral.Members.Add(NodeHelper.CreateNode(NodeKind.IndexSignature)); return(typeLiteral); } else { TypeLiteral typeLiteral = NodeHelper.CreateNode(NodeKind.TypeLiteral) as TypeLiteral; foreach (PropertyAssignment prop in properties) { Node initValue = prop.Initializer; Node elementType = null; if (initValue.Kind != NodeKind.ObjectLiteralExpression && initValue.Kind != NodeKind.ArrayLiteralExpression) { elementType = GetNodeType(initValue); } elementType = elementType ?? NodeHelper.CreateNode(NodeKind.AnyKeyword); elementType.NodeName = "type"; Node propSignature = NodeHelper.CreateNode(NodeKind.PropertySignature); propSignature.AddChild(prop.Name.TsNode); propSignature.AddChild(elementType); typeLiteral.Members.Add(propSignature); } return(typeLiteral); } }
public static Node GetTypeLiteralMemberType(TypeLiteral typeLiteral, string name) { foreach (Node node in typeLiteral.Members) { switch (node.Kind) { case NodeKind.PropertySignature: PropertySignature prop = node as PropertySignature; if (prop.Name.Text == name) { return(prop.Type); } break; case NodeKind.IndexSignature: IndexSignature index = node as IndexSignature; return(index.Type); default: break; } } return(null); }