javascript - Hur skapar man ett gränssnitt baserat på objektets egenskaper?


Jag använder senaste TypeScript och Angular och jag har ett objekt:

const obj: ObjInterface = {
 prop1: 1,
 prop2: 2,
 prop3: '3'
}

Jag har också ett gränssnitt baserat på det objektet:

interface ObjInterface {
  prop1: number;
  prop2: number;
  prop3: string;
}

Är det möjligt att skapa ett gränssnitt för arrayen som endast består av egenskaperna hos obj?

const array: SomeInterface = ['prop1', 'prop2', 'prop3']; // OK
const array: SomeInterface = ['prop1', 'prop2', 'prop4']; // error

Svar #1

Du kan skapa en array av nycklar av en typ med hjälp av keyof-operatorn

interface ObjInterface {
    prop1: number;
    prop2: number;
    prop3: string;
}
const array: Array<keyof ObjInterface> = ['prop1', 'prop2', 'prop3']; // OK
const array2: Array<keyof ObjInterface> = ['prop1', 'prop2', 'prop4']; // error

Observera Detta kommer att vara ett kompileringstidfel, vid körning kan du ha olika strängar i arrayen om du går utanför typsystemet eller om du använder typantaganden.