Typescript: sette sammen en union av rest-parametere?
Se koden:
type FN = <U>(...rest: U[]) => U
declare const fn: FN
let union = fn('bar', 123) // Argument of type '123' is not assignable to parameter of type 'string'
Jeg forventet at union skulle ha en unionstype string | number, men i stedet er U satt til typen til det første argumentet (string).
Er det mulig å sende typer på rest-argumenter til en union?
Lekeplass
Svar #1
Jeg er ikke sikker på designbeslutningene rundt dette, men hvis du har U[] vil ikke kompilatoren utlede en union for det, den vil heller gi en feil for primitive typer i det minste (dette resulterer for eksempel i en union let union=fn({ a: 'bar' }, { b: 123 })).
En enkel løsning er å bruke tupler i rest-parametere i stedet:
type FN = <U extends any[]>(...rest: U) => U[number]
declare const fn: FN
let union = fn('bar', 123) // string | number
