J'ai du mal à trouver comment faire de mes and
ici : elle a un travail simple. elle doit accepter un tas d'éléments, et les concaténer dans un tableau qui commence avec "and"
// the items 'and' may accept
type Item = false
| {type: "alpha", a: boolean}
| {type: "bravo", b: number}
// 'and' function adds items to an array
function and<Items extends Item[]>(
...items: Items
): ["and", ...Items] {
return ["and", ...items]
}
// calling 'and' with a few items
const [op, item1, item2, item3] = and(
false,
{type: "alpha", a: true},
{type: "bravo", b: 3.14},
)
// verifying the types are preserved
op //> type "and"
item1 //> type Item, expected false
item2 //> type Item, expected {type: "alpha", a: true}
item3 //> type Item, expected {type: "bravo", b: 3.14}
le problème est que les éléments 1, 2 et 3 perdent tous leur information de type spécifique d'origine, ce qui fait que mon and
est en fait une opération destructive sur les types - à la place, j'ai besoin que les types soient préservés.
existe-t-il une approche différente ? merci !