のために複数の種類の制約を指定することはできますか?は、私は、単一の型の制約で、この例のような汎用的なインタフェースを持って活字体ジェネリック
答えて
ことが可能である
interface Example<T extends MyClass | OtherClass> {
}
この問題を回避するには、スーパーインタフェースを使用することです(これは、「なぜインタフェースがクラスから継承するのを許可するのでしょうか」という質問にも答えています)。
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
これは適切なソリューションです。しかし、2つのクラスからインターフェイスを拡張することは恐ろしいことですが、両方ともプライベートメンバーを宣言すると、インターフェイスは満たされません。 –
あなたは紳士で学者です!ありがとうございました。 – Fenton
クラスから派生したインターフェイスについてのコメントを参照してください。
私は0.9.0仕様のセクション3.5でこれを見つけた:
クラス 宣言は、これらの名前付きの型の実装のインスタンスを作成 名前付きの型とコンストラクタ関数を導入し、一方、インタフェースの宣言だけで、名前付きの型を導入。 クラスとインターフェイスの宣言によって導入された型は、 という相違点しかありません(クラスは省略可能なメンバを宣言することができず、 はプライベートメンバを宣言できません)。 は互換性があります。特に、publicである メンバーのクラス宣言では、インターフェイス宣言によって で作成されたものとまったく同じように機能する名前付き型が導入されています。組合の種類をサポートしtypescriptですでは
オプションのクラスメンバーが実装されました:https://github.com/Microsoft/TypeScript/pull/8625 –
- 1. C#のジェネリック質問 - 汎用的なインタフェースの制約
- 2. 角度1と活字体:私はこのような活字体クラスを持つクラスのコンストラクタでのプロパティ
- 3. 活字体の規約活字体で
- 4. 一般的な制約を持つ汎用メソッド
- 5. コンパイル型の不一致私はこのインタフェースを持つメソッド持って
- 6. 私は、このコードスニペットを持っている私のジェネリック型パラメータ
- 7. は、私はこのような一般的な例外クラスを持つXML-コメント
- 8. は、私は、このような文字列を持っている単語
- 9. 一般的な制約によってのみ異なるメソッドオーバーロード
- 10. 私はこのような(簡体字)XMLを持っているPHP
- 11. ジェネリック型引数を持つ汎用のジェネリック型
- 12. 私はこのような性質とのインタフェースを持っているJSON.net
- 13. 私はこのような文字列を持っている
- 14. は、私が予約モデルを持っている単一のモデル
- 15. は、私はこのような単純なデモ・クラスを持っています
- 16. の汎用インタフェースや多型
- 17. は、どのように私は、文字列は、私はこのような文字列を持っている
- 18. Railsのルートの制約 - Unicodeの正規表現は、だから私は、次のようなパスに一致する制約のルートを持っている
- 19. 一般的な制約を値型で使用する
- 20. IOSの制約は次の制約と私はscrollViewを持って
- 21. SQL Serverは:私はこのようなvarchar型の値持って終了
- 22. 型定義なしでTypescriptでノードモジュールをインポートするには?私はこのような活字体でのNode.jsモジュールをインポートしようとする
- 23. が、私はこのような単純な形を持っているprototypejs
- 24. クエリが、私はこのような非常に単純なクエリを持って
- 25. は、私はJavaScriptで書かれたNode.jsのモジュールのこのタイプを持って活字体
- 26. 私は典型的なモデル持っjhipster実体
- 27. F#型制約が一致しません一般的な機能に制約を使用して、F#プロジェクトで
- 28. Valaのは、私は、このようなファイルを持って行
- 29. 汎用型制約と継承型の両方を持つ汎用クラス定義ですか?
- 30. 活動は、私は3つの活動を持って活動
制約の唯一の目的のためにインターフェイスを作成する必要がないので、これを実現するためには連合型が最適です。彼らは2013年には存在しませんでしたが、これは今私が今それをやることをお勧めします。 – Fenton
この回答は間違っています。連合型は、2つの異なる型を拡張するのと同じセマンティクスを持ちません。 – AlexG
@AlexG確かにこれは2つのタイプの_extending_と同じではありませんが、_implementing_ 2つのインターフェースと同じです。 – STO