1

test.tsファイルとMY_MODULE.d.tsファイルがあるとします。

MY_MODULE.d.ts:

module MY_MODULE 
{
    export class Config { 
        UserId : string;
    };

    export function Init( config : Config );
}

test.ts:

/// <reference path="MY_MODULE.d.ts" />

MY_MODULE.Init(<MY_MODULE.Config>{ UserId: 'Josh' });

私の質問:定義ファイルまたは.tsファイルのいずれかを修正して、後者のキャストが不要になるようにすることは可能ですか?

4

2 に答える 2

2

export interface Configの代わりに使用してくださいexport class Config

于 2013-03-21T14:08:09.630 に答える
0

Typescriptは、オブジェクトの署名に基づいて正しいタイプを推測するため、キャストは必要ありません。
コードを遊び場にコピーすると、すぐにいくつかのコンパイルエラーが検出されました。まず、Initには実装が必要です。
次に、Configクラスにはコンストラクターがありません。
次のコードはきれいにコンパイルされます。

module MY_MODULE 
{
    export class Config { 
        UserId : string;
    };

    export function Init( config : Config ) {
    }
}

var myConfig = new MY_MODULE.Config();
myConfig.UserId = 'Josh'

MY_MODULE.Init(myConfig);

Configのコンストラクターを次のように定義することをお勧めします。

module MY_MODULE 
{
    export class Config {
        UserId : string; 
        constructor(userId : string) {
            this.UserId = userId;
        }
    };
    export function Init( config : Config ) {
    }
}

MY_MODULE.Init(new MY_MODULE.Config('Josh'));
于 2013-03-21T14:23:43.427 に答える