Issue
I'm trying to pass a few arguments, but I get an error from linter: TS2314: Generic type 'FruitKit ' requires 1 type argument(s).
I tried to use something by type ...args, but it also didn't work.
interface Apple {
red: number;
yellow: number;
}
interface Banana {
ripe: number;
rotten: number;
}
interface FruitKit<T> {
fruits: T
}
interface MyCustomFruitKit extends FruitKit<Apple, Banana> {}
const FruitKit: MyCustomFruitKit = {
fruits: {
red: 1,
yellow: 2
}
};
Solution
You can only pass a single type argument to a type that expects only a single type parameter. What you in this case depends on what you want, whether you want FruitKit<Apple, Banana> to mean that each property is both an Apple and a Banana, or that each property is either an Apple or a Banana. From your example usage, I suspect you want either/or, which is the union type Apple | Banana:
interface MyCustomFruitKit extends FruitKit<Apple | Banana> {}
(If you wanted them to be both, it would be &, an intersection, rather than |, and your objects in the usage example would need all four properties [red and yellow and ripe and rotten].)
Side note: I'd avoid having a type and a constant with the same name (FruitKit). Although the names live in different namespaces, it's still confusing to the programmer reading the code.
Answered By - T.J. Crowder
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.