/// <summary> /// Converts the specific type to it's string representation using a formatter registered for the type /// </summary> /// <param name="type">The type to format.</param> /// <returns>The string representation of the type.</returns> public string FormatType(TsType type) { if (_formatters.ContainsKey(type.GetType())) { return _formatters[type.GetType()](type, this); } else { return "any"; } }
private static IEnumerable <TsType> Unwrap(TsType tsType) { switch (tsType) { case TsUnionType tsUnionType: return(tsUnionType.Types.SelectMany(Unwrap)); case TsArrayType tsArrayType: return(Unwrap(tsArrayType.ElementType)); case TsObjectType tsObjectType: return(tsObjectType.Members .Select(UnwrapTsTypeMember) .SelectMany(Unwrap)); case TsTypeReference tsTypeReference: return(tsTypeReference.TypeArguments .SelectMany(Unwrap) .Append(tsTypeReference)); case TsEnumLiteralType tsEnumLiteralType: return(new[] { tsEnumLiteralType.EnumType }); case TsNull _: case TsPredefinedType _: case TsStringLiteralType _: case TsBoolLiteralType _: case TsIntLiteralType _: return(new[] { tsType }); default: throw new ArgumentOutOfRangeException(nameof(tsType), tsType.GetType().Name, null); } }
/// <summary> /// Converts the specific type to it's string representation using a formatter registered for the type /// </summary> /// <param name="formatters"></param> /// <param name="type">The type to format.</param> /// <returns>The string representation of the type.</returns> public static string FormatType(this Dictionary <Type, TsTypeFormatter> formatters, TsType type) { return(formatters.ContainsKey(type.GetType()) ? formatters[type.GetType()](type) : "any"); }