1. ホーム
  2. casting

[解決済み] TypeScriptでプロパティを持つ関数オブジェクトを作成する

2022-08-03 10:46:34

質問

関数オブジェクトを作成し、それにいくつかのプロパティを持たせたいと考えています。例えば、JavaScriptで私はそうします。

var f = function() { }
f.someValue = 3;

これでTypeScriptでは、このように型を記述できるようになりました。

var f: { (): any; someValue: number; };

しかし、私は実際にそれを構築することはできません、キャストを必要とせずに。こんな感じ。

var f: { (): any; someValue: number; } =
    <{ (): any; someValue: number; }>(
        function() { }
    );
f.someValue = 3;

キャストなしでどうやって作るんだ?

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

そこで、キャストなしで単純にビルドしてその関数を "f" に割り当てることが要件である場合、考えられる解決方法は以下のとおりです。

var f: { (): any; someValue: number; };

f = (() => {
    var _f : any = function () { };
    _f.someValue = 3;
    return _f;
})();

基本的に、これは自己実行型の関数リテラルを使用して、代入が行われる前にそのシグネチャにマッチするオブジェクトを構築"します。唯一の奇妙な点は、関数の内部宣言が 'any' 型である必要があり、そうでなければコンパイラは、まだオブジェクトに存在しないプロパティに代入していると叫ぶことです。

EDIT: コードを少し簡略化しました。