typescript - En typ eller ett gränssnitt för en array med strängegenskaper
Finns det ett sätt i TypeScript att definiera en typ eller ett gränssnitt för en array som tillåter slumpmässiga strängegenskaper? Till exempel, i JavaScript kan vi göra följande:
const list = [ 1, 2, 3, 4, 5 ];
list.foo = 'bar';
console.log(a); // [ 1, 2, 3, 4, 5, foo: 'bar' ]
console.log(a[1]); // 2
console.log(a.foo); // 'bar'
Jag skulle vilja definiera ett gränssnitt eller en typ i TypeScript som tillåter en sådan array. Jag har försökt följande:
interface IList extends Array<number> {
[key: string]: string;
}
Men det genererar en serie fel där befintliga arraymetoder inte kan tilldelas typen sträng.
Jag kan ha specifika nycklar inställda i det gränssnittet (t.ex. foo: string;), men jag undrade om det finns ett sätt att tillåta slumpmässiga strängegenskaper?
Svar #1
Du kan definiera typen genom att använda type-nyckelordet och en intersection:
type IList = number[] & {
[key: string]: string;
}
Men att tilldela ett värde till den typen är lite krångligt, eftersom en array inte kan tilldelas den (eftersom arrayer saknar strängindexsignaturen). För att åtgärda det måste du manuellt casta din array till den typen när du tilldelar den:
const x: IList = [1, 2, 3]; // Error: Index signature missing in type number[]
const y = [1, 2, 3] as IList; // Okay
Sedan :
y[0] // inferred as number
y["foo"] // inferred as string
y.filter(x => x % 2); // inferred as number[]
