Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }