95

TypeScript には次のクラスがあります。

class bar {
    length: number;
}

class foo {
    bars: bar[] = new Array();
}

そして、私は持っています:

var ham = new foo();
ham.bars = [
    new bar() {          // <-- compiler says Expected "]" and Expected ";"
        length = 1
    }
];

TypeScriptでそれを行う方法はありますか?

アップデート

自分自身を返す set メソッドを持つことで、別の解決策を思いつきました。

class bar {
    length: number;

    private ht: number;
    height(h: number): bar {
        this.ht = h; return this;
    }

    constructor(len: number) {
        this.length = len;
    }
}

class foo {
    bars: bar[] = new Array();
    setBars(items: bar[]) {
        this.bars = items;
        return this;
    }
}

したがって、次のように初期化できます。

var ham = new foo();
ham.setBars(
    [
        new bar(1).height(2),
        new bar(3)
    ]);
4

5 に答える 5

79

JavaScript や TypeScript のオブジェクトには、そのようなフィールド初期化構文はありません。

オプション1:

class bar {
    // Makes a public field called 'length'
    constructor(public length: number) { }
}

bars = [ new bar(1) ];

オプション 2:

interface bar {
    length: number;
}

bars = [ {length: 1} ];
于 2013-02-04T06:21:21.573 に答える
24

名前付きパラメータに加えて、オブジェクトをクラスのインスタンスにしたい場合は、次のようにします。

class bar {
    constructor (options?: {length: number; height: number;}) {
        if (options) {
            this.length = options.length;
            this.height = options.height;
        }
    }
    length: number;
    height: number;
}

class foo {
    bars: bar[] = new Array();
}

var ham = new foo();
ham.bars = [
    new bar({length: 4, height: 2}),
    new bar({length: 1, height: 3})
];

typescript issue tracker の関連項目もここにあります。

于 2013-08-19T19:21:36.540 に答える