TypeScript: Kuinka voin määritellä tyypin JavaScript-taulukolle, jolla on eri tyyppisiä alkioita mutta ei kiinteää pituutta?
Oletetaan, että minulla on JavaScript-taulukko, jolla on tietty kuvio eri elementtityypeistä alussa, mutta sitten (kuvio) toistuvia elementtityyppejä lopussa mielivaltaisella toistojen määrällä.
Miten voin määritellä TypeScript-tyypin, joka on yhteensopiva tämän JavaScript-taulukon kanssa?
interface A {
foo: Foo,
bar: Bar,
}
interface B {
baz: Baz
}
interface Bat {
// getArr(): [A, B, B, B], // tuple type puts types at specific indexes
// but only supports a fixed number of elements
// getArr(): Array<A | B>, // array type notation allows arbitrary number
// of elements but doesn't require them to be
// in specific positions
}
Muokkaa:
Selventääkseni tarkemmin, kokeilen ulkoisten TypeScript-määritysten käyttöä tavallisen JavaScript-koodin kanssa tunnistaakseni ongelmia olemassa olevassa JavaScript-koodissa. Ymmärrän, että tämä esitys voi olla epäviisas; jos alkuperäisen JavaScript-koodin luomisessa olisi käytetty enemmän viisautta, en olisi lähtenyt tälle seikkailulle.
Vastaus #1
Sellaista ei ole mahdollista määritellä TypeScriptin tyyppijärjestelmässä: taulukoiden täytyy olla yhtenäistä tyyppiä1
Tässä tapauksessa taulukko (Array<c'>) on homogeeninen c', jossa c'=A | B.
Tietenkin, jos tietorakenne voitaisiin purkaa, niin jokin lisä-/monimutkainen koodaus saattaisi olla "sopiva", esim.
[ A, Array<B> ]
1 En tiedä mistään ohjelmointikielen tyyppijärjestelmästä, joka sallisi tällaisen rajoituksen - sitomattomalle sekvenssille - satunnaisten kaavojen sääntöjen perusteella.
