hmEdgeJSのTypeScript型定義ファイルの例

  • 概要

    hmEdgeJS用のマクロは、ECMAScript6で記述しても良いですが、
    TypeScriptで記述する、という選択肢も有力でしょう。

    その際には、TypeScriptの型定義ファイルが必要となります。

    以下のものは、 本来のhmEdgeJSの内部の定義構造とは全く異なりますが、
    「入力補完」や「常識的記述の範疇のチェック」用途であれば十分便利に機能する
    かと思います。

  • hmEdgeJSのTypeScript型定義ファイルの例

    hmEdgeJS.d.tsなどとして、
    declare namespace hm {
    
        /**
         * 秀丸のバージョン。
         */
        const version: number;
                    
        /**
         * デバッグモニタへの出力。console.logと同じ。
         */
        function debuginfo(message?: any, ...optionalParams: any[]): void;
    
        namespace Macro {
    
            /**
             * 複数の秀丸マクロをヒアドキュメント的に記述するための特殊な関数表記の型。
             */
            type TFnExpression = (f: any) => void;
    
            /**
             * 秀丸マクロを実行。
             */
            function Eval(expression: string | TFnExpression): {
                readonly Result: number;
                readonly Message: string;
                readonly Error: {
                    readonly Message: string;
                }
            };
    
            /**
             * 秀丸マクロの変数の読み書きのための型。関数のような表記と連想配列のような表記。
             */
            interface TVar {
                (key: string): number | string;
                (key: string, value: any): void;
                [key: string]: any;
            }
    
            /**
             * 秀丸マクロの変数の読み書き。
             */
            let Var: TVar;
        }
    
        namespace Edit {
    
            /**
             * 編集中のテキスト内容の読み書き
             */
            let TotalText: string;
    
            /**
             * 通常選択や行選択のテキスト内容の読み書き
             */
            let SelectedText: string;
    
            /**
             * カーソル行のテキスト内容の読み書き
             */
            let LineText: string;
    
            /**
             * カーソルの位置
             */
            const CursorPos: {
                readonly column: number;
                readonly lineno: number;
            };
    
            /**
             * マウスの位置に対応するカーソルの位置
             */
            const MousePos: {
                readonly column: number;
                readonly lineno: number;
                readonly x: number;
                readonly y: number;
            };
        }
    }
    
  • 使用例

    test.tsなどとして、
    /// <reference path="hmEdgeJS.d.ts"/>
    
    let lineno: number = hm.Macro.Var["lineno"];