Comment obtenir le type d'une propriété d'interface dans TypeScript?
J'ai donc un code comme:
interface MyInterface{
a:any,
b:string,
c:boolean,
d:number,
readonly valueChanges:Subject<{key: keyof MyInterface, value: ???}>
}
où je ne sais pas comment écrire le type de la valeur sous la bonne «clé». J'ai essayé le typeof MyInterface[key]mais ce n'est probablement pas comment le résoudre. :(
Merci pour votre temps à l'avance!
Réponses
Vous pouvez utiliser le AllValuestype d'utilitaire publié par Titian Cernicova-Dragomir . Notez que vous n'en avez pas besoin extends Record<PropertyKey, PropertyKey>car cela est spécifique au problème de l'inversion.
type AllValues<T> = {
[P in keyof T]: { key: P, value: T[P] }
}[keyof T]
Vous appliquez ensuite ce type à votre interface, mais assurez-vous que ce {key: valueChanges...}n'est pas l'une de vos options.
type KeyValueObject = AllValues<Omit<MyInterface, "valueChanges">>
interface MyInterface{
a: any;
b: string;
c: boolean;
d: number;
readonly valueChanges: Subject<AllValues<Omit<MyInterface, "valueChanges">>>;
}
Je n'aime pas le référencement circulaire ici, donc personnellement je le diviserais en morceaux composables. MyInterfacefinirait par être un typeplutôt qu'un interface, mais il y a très peu de différence pratique.
interface BaseInterface {
a: any;
b: string;
c: boolean;
d: number;
}
type WithValueChanges<T> = T & {
readonly valueChanges: Subject<AllValues<T>>
}
type MyInterface = WithValueChanges<BaseInterface>