javascript - Iterere over grenseflateegenskaper i TypeScript
Jeg trenger å kartlegge grensesnitt-egenskaper til objekter:
interface Activity {
id: string,
title: string,
body: string,
json: Object
}
Jeg gjør for øyeblikket:
headers: Array<Object> = [
{ text: 'id', value: 'id' },
{ text: 'title', value: 'title' },
{ text: 'body', value: 'body' },
{ text: 'json', value: 'json' }
]
Dette blir veldig repeterende. Det jeg ønsker er noe slik som dette:
headers: Array<Object> = Activity.keys.map(key => {
return { text: key, value: key }
})
Svar #1
Du kan ikke, grensesnitt er bare for kompileringstid fordi JavaScript ikke støtter det.
Det du kan gjøre er noe sånt som:
const Activity = {
id: "",
title: "",
body: "",
json: {}
}
type Activity = typeof Activity;
const headers: Array<Object> = Object.keys(Activity).map(key => {
return { text: key, value: key }
});
(kode i lekeplass)
Svar #2
Hvis du er ok med å få det lagt til under kompileringstid og du bruker TypeScript >= 2.4.1, kan du prøve måten som foreslås her.
Grunnleggende bør du legge til ts-transformer-keys-avhengigheten, tilpasse transformatoren, som en enkel en, og du vil kunne liste egenskapene slik:
import { keys } from 'ts-transformer-keys';
interface Props {
id: string;
name: string;
age: number;
}
const keysOfProps = keys<Props>();
console.log(keysOfProps); // ['id', 'name', 'age']
