Example #1
0
 public static TsTypeDefinition Interface(
     Type type,
     IEnumerable <TsInterfaceMember> members,
     IEnumerable <TsTypeReference> extends,
     IEnumerable <string> typeParameters,
     DerivedTypesUnionGeneration derivedTypesUnionGeneration,
     TsTypeDefinition parentToAugument,
     string typeMemberName
     )
 {
     return(new InterfaceType(type, members, extends, typeParameters, derivedTypesUnionGeneration, parentToAugument, typeMemberName));
 }
Example #2
0
 public InterfaceType(
     Type type,
     IEnumerable <TsInterfaceMember> members,
     IEnumerable <TsTypeReference> extends,
     IEnumerable <string> typeParameters,
     DerivedTypesUnionGeneration derivedTypesUnionGeneration,
     TsTypeDefinition parentToAugument,
     string typeMemberName
     ) : base(TypeUtils.GetNameWithoutGenericArity(type))
 {
     _members        = ImmutableArray.CreateRange(members);
     _extends        = ImmutableArray.CreateRange(extends);
     _typeParameters = ImmutableArray.CreateRange(typeParameters);
     _type           = type;
     _derivedTypesUnionGeneration = derivedTypesUnionGeneration;
     _parentToAugument            = parentToAugument;
     _typeMemberName = typeMemberName;
 }
Example #3
0
        public static async Task <TsTypeDefinition> BuildTsTypeDefinitionAsync(Type type, TypeBuilderConfig config, GeneratorContext generatorContext)
        {
            var tsNamespace = GetTypescriptNamespace(type);

            if (type.IsEnum)
            {
                var members = Enum.GetNames(type);
                return(TsTypeDefinition.Enum(type.Name, members));
            }
            else
            {
                var properties = TypeUtils.GetRelevantProperties(type);
                var fields     = TypeUtils.GetRelevantFields(type);

                IList <Type> extends;
                if (type.IsInterface)
                {
                    extends = type.GetInterfaces();
                }
                else if (type.IsValueType || TypeUtils.Is <object>(type.BaseType))
                {
                    extends = new List <Type>();
                }
                else
                {
                    extends = new List <Type> {
                        type.BaseType
                    };
                }

                foreach (var iface in type.GetInterfaces())
                {
                    // We look for default interface properties because we don't generate an extends clause for C# interfaces
                    // but that means we loose default interface properties. If any of the types interface has default properties
                    // we include it in the extends clause.
                    var defaultInterfaceProperties = TypeUtils.GetRelevantProperties(iface).Where(p => p.GetGetMethod()?.IsAbstract == false);

                    properties.AddRange(defaultInterfaceProperties);
                }

                var parentToAugument    = GetParentTypeToAugument(type);
                var parentDefToAugument = default(TsTypeDefinition);
                if (parentToAugument != null)
                {
                    parentDefToAugument = await BuildTsTypeDefinitionAsync(parentToAugument, config, generatorContext);
                }

                var members = new List <TsInterfaceMember>();

                members.AddRange(properties.Select(m => BuildMember(m, type.GetInterfaces(), config, tsNamespace)).Where(x => x != null));
                members.AddRange(fields.Select(m => BuildMember(m, type.GetInterfaces(), config, tsNamespace)).Where(x => x != null));

                return(TsTypeDefinition.Interface(type,
                                                  members,
                                                  extends.Select(e => BuildTsTypeReference(e, config, tsNamespace, true)),
                                                  type.GetTypeInfo().GenericTypeParameters.Select(TypeUtils.GetNameWithoutGenericArity),
                                                  GetDerivedTypes(type, config, tsNamespace, generatorContext),
                                                  parentDefToAugument,
                                                  GetTypeMemberName(type)));
            }
        }
Example #4
0
 public override bool Equals(TsTypeDefinition tsTypeDefinition)
 {
     return(_type == tsTypeDefinition.Name);
 }
Example #5
0
 public override bool Equals(TsTypeDefinition tsTypeDefinition)
 {
     return(_inner.Equals(tsTypeDefinition));
 }
Example #6
0
 public abstract bool Equals(TsTypeDefinition tsTypeDefinition);
Example #7
0
 public override bool Equals(TsTypeDefinition tsTypeDefinition)
 {
     return(false);
 }
Example #8
0
 public override bool Equals(TsTypeDefinition tsTypeDefinition)
 {
     return(_genericType.Equals(tsTypeDefinition));
 }