1. ホーム
  2. javascript

[解決済み] TypeScriptの静的クラス

2022-03-07 19:39:52

質問

C#のような構文が好きなので、従来のJSからTypeScriptに移行したいと思いました。 問題は、TypeScriptで静的クラスを宣言する方法がわからないことです。

C#では、変数やメソッドを整理するために静的クラスを使うことが多く、オブジェクトをインスタンス化することなく、名前付きのクラスにまとめています。 バニラJSでは、単純なJSオブジェクトでこれをやっていました。

var myStaticClass = {
    property: 10,
    method: function(){}
}

TypeScriptでは、私はむしろC-sharpyのアプローチに行きたいのですが、TSでは静的クラスが存在しないようです。 この問題に対する適切な解決策は何でしょうか?

どのように解決するのですか?

TypeScriptはC#ではないので、C#と同じ概念をTypeScriptに必ずしも期待しないほうがよいでしょう。問題は、なぜ静的クラスが必要なのか、ということです。

C#では、静的クラスは単にサブクラス化できないクラスであり、静的メソッドのみを含まなければなりません。C#では、クラスの外側に関数を定義することはできません。しかし、TypeScriptではそれが可能だ。

もし関数やメソッドをネームスペースに置く(つまりグローバルではない)方法を探しているなら、TypeScriptのモジュールを使うことを検討するといいだろう。

module M {
    var s = "hello";
    export function f() {
        return s;
    }
}

そのため、M.f()には外部からアクセスできますが、sにはアクセスできず、モジュールを拡張することはできません。

参照:TypeScript 仕様 を参照してください。