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
