2017-01-18 12 views
2

TypeScriptクラスのプロパティは、値が割り当てられていないと、変換された出力から消えてしまうことがわかりました。必須のプロパティは定義されていません

この活字体クラス...

class Foo { 
    value: any; 
} 

になり..

私は関係なく、そのプロパティを作成するためにコンストラクタを期待するよう Foo.valueプロパティは、オプションのプロパティとして宣言されていない
var Foo = (function() { 
    function Foo() { 
    } 
    return Foo; 
}()); 

それに値が割り当てられているかどうか。

var Foo = (function() { 
    function Foo() { 
     Object.defineProperty(this, 'value', {}); 
    } 
    return Foo; 
}()); 

この動作はどのようにして取得できますか?

+0

それは、最適化のほんの一種だろうか?割り当てられていないプロパティのコードを作成する意味はなく、したがって常に定義されていません。 – enkryptor

+2

値が '未定義 'に設定されているプロパティとプロパティが完全に存在しないプロパティの間には、テスト可能な違いはありませんか? –

+0

私は 'hasOwnProperty'は@StevenLiekensの動作が違うと考えています – Paarth

答えて

2

このプロパティを保証する最も簡単な方法は、値を割り当てることです。明示的なnullはあなたのために機能するはずです。

class Foo { 
    value: any = null; 
} 

コンストラクタのプロパティは常にも出力されます。

class Foo { 
    constructor(public value: any) { } 
} 

またはあなたは必死にそれがObject.definePropertyで行わたい場合は...

class Foo { 
    private _foo: string; 

    get foo() { return this._foo; } 
    set foo(value: string) { this._foo = value;} 
} 
+1

これは 'Object.defineProperty(...)'ではなく 'this.value = value'に変換されます。 – artem

+0

追加のサンプルが追加されました。 – Fenton

関連する問題