6

デフォルトのインターフェイス オブジェクトを作成する方法はありますか?

例:

interface myInterface {
    A: string;
    B: string;
    C: number;
    D: CustomType; // A custom class
}

通常、このインターフェースのオブジェクトは次の方法で作成します。

var myObj: myInterface = {
    A: "",
    B: "",
    C: 0,
    D: null
}

ただし、次のように構文糖衣があればいいのですが。

var myObj = new myInterface;
// OR
var myObj = default(myInterface);

私の調査では、これを行う方法が見つかりませんでした。しかし、私は何かを逃したことを望んでいます。

4

3 に答える 3

14

少し異なる構文を使用して、すべての型チェックと IntelliSense を取得できます。

interface IUserModel{
  Name: string;
  Age: number;
  Email: string;
  IsActive: boolean;
}

var user = <IUserModel>{};

空のユーザー オブジェクトを作成しますが、TypeScript コンパイラはオブジェクトに有効なプロパティがあることを確認し、コード補完を提供します。

ここに画像の説明を入力

ここに画像の説明を入力

于 2015-07-20T19:15:13.187 に答える
2

いいえ、ありません。

インターフェイス宣言はコンパイル時にのみ存在するため、そのようなことを行うのはコンパイル時だけです。残念ながら、コンパイラはこれを行うための言語構造も、コンパイル プロセスを拡張する方法も提供していません。


この問題を回避する 1 つの方法は、コード生成を行うことです。正しい構造のオブジェクトを作成する関数を追加します。このアプローチの問題は、TypeScript コードまたはドメイン固有言語を解析する必要があることです。

このようなものを読んでください:

<Definitions>
    <Interface Name="myInterface">
        <Member name="A" type="string"/>
        <Member name="B" type="string"/>
        <Member name="C" type="number"/>
        <Member name="D" type="CustomType"/>
    </Interface>
</Definitions>

そして、次のようなものを生成します:

interface myInterface {
    A: string;
    B: string;
    C: number;
    D: CustomType;
}

function InitMyInterface(obj?: any): myInterface {
    if (obj === undefined) obj = {};
    return {
        A: obj.A === undefined ? "" : obj.A,
        B: obj.B === undefined ? "" : obj.B,
        C: obj.C === undefined ? 0 : obj.C,
        D: obj.D === undefined ? null : obj.D, // or InitCustomType(obj.D)
    };
}
于 2012-11-10T22:54:02.263 に答える