Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        /// <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());
        }