TypeScript: une propriété d'interface dépendante d'une autre
est-il possible de taper une propriété d'interface dépendante d'une autre?
Par exemple j'ai:
const object = {
foo: 'hello',
bar: { hello: '123', },
}
Et je veux m'assurer que la clé de bar doit être la valeur de foo .
interface ObjectType = {
foo: string;
bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}
Merci! :)
Réponses
5 AluanHaddad
Vous avez besoin d'un générique pour capturer le type d'une chaîne spécifique
interface ObjectType<K extends string> {
foo: K;
bar: { [P in K]: string };
}
Alors tu peux écrire
const object: ObjectType<'hello'> = {
foo: 'hello',
bar: { hello: '123', },
};
Ou, si vous avez une fonction qui prend un tel objet, vous pouvez utiliser l'interface pour appliquer la règle avec l'inférence de type complet
function useObject<K extends string>(o: ObjectType<K>) { }
useObject({
foo: 'hello',
bar: { hello: '113' } // works
});
useObject({
foo: 'hello',
bar: { world: '113' }
// ^^^^^−−−−−−−−−−−− error, `world` should be `hello`
});
Lien Playground