Does using a type guard work for you?
function isBook(obj: unknown): obj is Book {
return (obj as Book)?.author !== undefined
}
You would use it in your code like so:
<GenericSelect
onChange={(value) => {
if (isBook(value)) {
console.log(value.author); // Only accessible if `value` is a `Book`
} else {
console.log(value.title); // Only accessible if `value` is a `Movie`
}
}}
values={books}
/>