Typescript opprett nøkkel ved bruk av en generisk type


Jeg prøver å skrive et generisk grensesnitt som aksepterer to typer, noe som returneres av Entry, T og key, K som inneholder dette.

Jeg er ikke sikker på om dette er noe som kan gjøres ved hjelp av TypeScript.

Vet noen? Takk!

// this is a bad way of doing it
export interface Reconfigure<T> {
  title: string
  keyOne?: Entry<T>[]
  keyTwo?: Entry<T>[]
  keyThree?: Entry<T>[]
  keyFour?: Entry<T>[]
}

// this is close to what I'd want to do, but doesn't work
export interface Reconfigure<T, K> {
  title: string
  [K]: Entry<T>[]
}

Svar #1

Du kan bruke en kartlagt type. De forhåndsdefinerte typene Record og Partial bør la deg lage en type basert på en union av streng-litteral typer. Å legge til den faste delen av typen er bare et spørsmål om å bruke en snittype (&):

export type Reconfigure<T, K extends PropertyKey> = Partial<Record<K, Entry<T>>> &  {
    title : string
}

type T = Reconfigure<string, "k1" | "k2" | "k4">
// same as
// type T = {
//     k1?: Entry<string> | undefined;
//     k2?: Entry<string> | undefined;
//     k4?: Entry<string> | undefined;
//     title: string;
// }

Lekeromlenke