私は、抽象親クラスがそのサブクラスを通じて提供されるジェネリック型のすべてのプロパティを継承する必要があるパターンを作成しています。TypeScriptの汎用パラメータからどのように拡張できますか?
ここでは基本的なアイデアを提供し、基本クラスのコンストラクタを見てだ、ともviewed on githubことができます。
public constructor(data: T) {
_.assign(this, _.omit(data, [
"table",
"id",
"PartitionKey",
"RowKey",
]));
}
私が探している何をして効果的にthisを表現するいくつかの方法であります:
export abstract class Base<T extends EntityData> implements Storage.AbstractEntity & T {
...
残念ながら、これはサポートされていないようあなたは
export class AuthorFact extends Base<Author> {
public get RowKey() { return (this as any).id }
}
見ることができるように、私は:現在ので、私は私が私の基本クラスは、このようなことからalso receives the properties of the generic type it's encapsulating継承する任意のクラスがあること、その一般的なパラメータを拡張することができますどのように途方に暮れてよ私の基本型から& T
を削除し、(this as any)
を使用してエラーをスローするコンパイラを抑制してください。
.id
の型チェックと、作成するインスタンスでAuthor
という他のプロパティが利用できるようにすることが究極の目的です。
マッピングされた型を使用できる可能性はありますか?また、なぜクラスの代わりに関数を使っていくつかのものをラップするのはなぜですか? –
マップされたタイプについての考え方はありません。 'extends 'のためにTも型と同様に値でなければならないので、' T = A & B; class C extends T {} 'を実行することができないので、関数が必要です。'エラーTS2693:' T 'タイプを参照していますが、ここの値として使用されています。クラス型を返す関数がそれを行う唯一の方法です。 – artem
私はあなたの答えを念頭に置くつもりですが、それは1つの実行可能なアプローチのようです。私はちょうどより新しい言語の特徴がより少なく...回路的な解決をもたらすかもしれない着陸していないことを確認したい;) –