public string Convert(IItemInterface item, Config config, int indent, List <string> otherScripts) { var result = new StringBuilder(); var indentSpace = GetIndentSpace(indent); // コメント result.Append(GetTypeScriptComments(item, indentSpace)); // インターフェイス定義 result.Append(indentSpace); result.Append($"{GetScope(item)}interface {item.Name}"); // ジェネリックスクラス if (item.GenericTypes.Any()) { result.Append("<"); result.Append(string.Join(", ", item.GenericTypes.Select(typeItem => GetTypeScriptType(typeItem)))); result.Append(">"); } // インターフェイスあり if (item.Interfaces.Any()) { var interfaceList = new List <string>(); foreach (var targetItemList in item.Interfaces) { // インターフェース名追加 interfaceList.Add(ExpressionsToString(targetItemList)); } result.Append(" implements "); result.Append(string.Join(", ", interfaceList.Select(typeItem => GetTypeScriptType(typeItem)))); } result.AppendLine(" {"); // メンバー追加 var members = item.Members; if (config.Mode.Value == OutputMode.Mode.WithoutMethod) { members = members.Where(member => member is IItemField || member is IItemProperty || member is IItemClass || member is IItemInterface).ToList(); } foreach (var member in members) { result.Append(ConvertUtility.Convert(member, config, indent + 1, otherScripts)); } result.AppendLine($"{indentSpace}}}"); return(result.ToString()); }
/// <summary> /// 変換メソッド メイン処理(interface) /// </summary> /// <param name="parentInstanse">親インスタンス</param> /// <param name="item">C#解析結果</param> /// <param name="config">設定情報</param> /// <param name="indent">インデント数</param> /// <param name="otherScripts">その他のスクリプト(内部クラスなど)</param> /// <returns>TypeScript変換結果</returns> private string ConvertMain(IItemInterface parentInstanse, IItemMethod item, Config config, int indent, List <string> otherScripts) { // 親インスタンスがnullの場合はそのまま終了 if (parentInstanse is null) { return(string.Empty); } var result = new StringBuilder(); var indentSpace = GetIndentSpace(indent); // メソッド名 string BaseMethodName = item.Name; // コメント result.Append(GetTypeScriptComments(item, indentSpace)); // パラメータ取得 var args = new List <string>(); foreach (var arg in item.Args) { args.Add($"{arg.name}: {ExpressionsToString(arg.expressions)}"); } // 定義 var returnType = ExpressionsToString(item.MethodTypes); result.Append($"{indentSpace}{BaseMethodName}"); // ジェネリックスクラス if (item.GenericTypes.Any()) { result.Append("<"); result.Append(string.Join(", ", item.GenericTypes.Select(typeItem => GetTypeScriptType(typeItem)))); result.Append(">"); } result.Append("("); result.Append(string.Join(", ", args)); result.Append($"): {returnType};"); result.AppendLine(); return(result.ToString()); }