あなたのコードから何をしようとしているのかを理解することは難しいです。例えば、item
はctorがパラメータとして取得するものですか? Item
または別のタイプの別のインスタンスですか?
また、所有者との全体が明確ではありません。
いずれの場合でも、クラスには定義済みのプロパティが含まれているか、または定義されていません。
あなたはもちろんのメンバーとして、それらを定義することなくCTORで複数のプロパティを追加することができますが、それはあなたがおそらくたとえば、避けることを好むtypescriptですが、コンパイル・エラーが発生します:
class Point {
public x: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y; // error: Property `y` does not exists on type `Point`
}
}
あなたはany
にキャストしてそれを解決することができます。
class Point {
public x: number;
constructor(x: number, y: number) {
this.x = x;
(this as any).y = y; // no error
}
}
しかし、これは問題です:あなたにここに
let p = new Point(10, 5);
console.log(p.x);
console.log(p.y); // error: Property `y` does not exists on type `Point`
はuができますse any
:console.log((p as any).y);
ですが、コンパイラのタイプチェックをバイパスしています。もしそれをしているのなら、なぜtypescriptを気にするのでしょうか?
null
またはundefined
というメンバーを持つことを避けたいのであれば、同じインターフェイス/ベースクラスの異なる実装を使用し、受信したデータに基づいて適切な実装を作成するためにファクトリ関数を使用します。 :
interface ItemData {
counter?: number;
}
class BaseItem {
static create(data: ItemData): BaseItem {
if (data.counter) {
return new ItemWithCounter(data);
}
return new BaseItem(data);
}
constructor(data: ItemData) {}
}
class ItemWithCounter extends BaseItem {
private counter: number;
constructor(data: ItemData) {
super(data);
this.counter = data.counter;
}
}
このプロパティに項目がある場合にのみこのプロパティを作成するのはどういう意味ですか、 'item'に' counter'がないとどうなりますか? 'Item'に' counter'メンバを持つことはできません。それはそこにあるかどうかです。しかし、値が 'null'または' undefined'になることがあります。それはあなたが探しているものですか? –
ありがとう、ありがとう。はい、もちろん、私はthis.counter = item.counterを書くことができます|| nullですが、item.counterが存在する場合のみthis.counterを作成する方法はあります。 – marcos
"アイテムにカウンタがない場合はどうなりますか?" element.counterにもこのプロパティはありません:) – marcos