The short a answer is you can’t. No value will be assignable to an unresolved conditional type (a conditional type that still depends on a free generic type variable). The only thing you can do is use a type assertion.
function test<T extends boolean>(a: T): T extends true ? string : number {
return (a ? '1' : 1) as any
}
Conditional types are useful to express relations between parameters but they don’t help when it comes to implementing the function. Another approach would be to use a more permissive implementation signature.
function test<T extends boolean>(a: T): T extends true ? string : number
function test(a: boolean): number | string {
return (a ? '1' : 1)
}