I have an interface IThing
and several interfaces that extend Ithing
: IThingA
, IThingB
, etc.
interface IThing{
id: string;
}
interface IThingA extends IThing{
a1: string;
a2: number;
}
interface IThingB extends IThing{
b1: string;
}
I have a generic function that creates an IThing
given a set of props
:
function createThing<T extends IThing>(
props: any = {}
): T {
const thing: T = {
id: newId(),
...props
};
return thing;
}
When I call the function:
const a1: string = "red";
const a2: number = 10;
const props = {a1}; //forgot to include a2
const thing: IThingA = createThing<IThingA>(props);
I would like Typescript to warn me if props
doesn't contain all the properties required for the specific IThing
. In this case I forgot a2
for IThingA
and Typescript doesn't warn.
How can I achieve this check?
CodePudding user response:
It seems that Omit<interface, id> will help you. So I Altered your code to match the requirements
function createThing<T extends IThing>(
props: Omit<T, 'id'>
): T {
const thing: T = {
id: newId(),
...props
} as T;
return thing;
}