
上QQ阅读APP看书,第一时间看更新
Multiple types in generic type constraints
We can only refer to one type when declaring a generic type constraint. Let's imagine that we need a generic class to be constrained, so it only allows types that extend the following two interfaces:
interface Foo { doSomething(): void; } interface Bar { doSomethingElse(): void; }
We may think that we can define the required generic constraint as follows:
class Example1<T extends Foo, Bar> { private prop!: T; public doEverything() { this.prop.doSomething(); this.prop.doSomethingElse(); // error } }
However, this code snippet will throw a compilation error. We cannot specify multiple types when declaring a generic type constraint. However, we can work around this issue by using Foo and Bar in a superinterface:
interface FooBar extends Foo, Bar {}
Foo and Bar are now superinterfaces because they are the parent interfaces of the FooBar interface. We can then declare the constraint using the new FooBar interface:
class Example2<T extends FooBar> { private prop!: T; public doEverything() { this.prop.doSomething(); this.prop.doSomethingElse(); } }