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']

Relaterte artikler