Wyciągnięcie nazw pól interfejsu

0

Hej, mam interfejs Person i chciałabym do tablic wyciągnąć nazwy jego pól – w zależności od tego czy typ jest stringiem czy liczbą (zapisać je do tablicy stringów)

interface Person {
    name: string;
    surname: string;
    age: number;
    city: string;
    country: string;
}

const stringProperties = []; // ['name', 'surname', 'city', 'country']
const numberProperties = []; // ['age']

Da się to jakoś łatwo zrobić? Kombinowałam z keyof, ale to z tego nie dało się zrobić stringów

3

Na poziomie TypeScriptu to nie wiem, ale jak już odpalisz działający program i będziesz miała konkretne obiekty, to za pomocą Object.entries w JS możesz wydobyć nazwy właściwości i konkretne wartości i na tej podstawie skonstruować tablice:

const person = {
    name: "Kotek",
    surname: "Kotkowy",
    age: 2,
    city: "Warszawa",
    country: "Polska",	
};

const stringProperties = [];
const numberProperties = [];

Object.entries(person).forEach(([k, v]) => {
	if (typeof v == 'number') numberProperties.push(k); 
	if (typeof v == 'string') stringProperties.push(k);
});

console.log(stringProperties); // [ 'name', 'surname', 'city', 'country' ]
console.log(numberProperties); // [ 'age' ]

No i jeśli chodzi stricte o TypeScript, to ten kod z jakichś powodów pokazuje błąd przy push. TypeScript uważa, że tablice stringProperties i numberProperties są typu never[] i nie pozwala pusznąć (parameter) k: string Argument of type 'string' is not assignable to parameter of type 'never' Więc tutaj adnotacje typów się przydadzą:

const stringProperties: string[] = [];
const numberProperties: string[] = [];

1 użytkowników online, w tym zalogowanych: 0, gości: 1