type Types = 'edit' | 'add' | 'delete';
type A = { a: number };
type B = {
b: string
};
type C = {
b: boolean
}
type TValues = A | B | C;
function test(type:'add', values: A[]): void;
function test(type: 'edit' | 'delete', values: B[] | C[]): void;
function test(type:Types, values:TValues[]) {
if(type === 'add') {
console.log(values.a); // Property 'a' does not exist on type 'TValues[]'.
return;
};
if(type === 'edit') {
console.log(values.b); // Property 'b' does not exist on type 'TValues[]'.
return;
}
if(type === 'delete') {
console.log(values.b) // Property 'b' does not exist on type 'TValues[]'.
return;
}
}
test('add', [ { a: 1 } ]);
test('edit', [ { b: 'b' } ]);
test('delete', [ {b: true} ]);
I get the error - Property [x] does not exist on type TValues.
Required functionality is if type === 'edit' or 'delete' type of "values" should be of type B[] or C[]. If it's add, then its type should be A[].
Here is a link to the playground - link