TypeScript: Eine von einer anderen abhängige Schnittstelleneigenschaft
Aug 15 2020
Ist es möglich, eine Schnittstelleneigenschaft abhängig von einer anderen einzugeben?
Zum Beispiel habe ich:
const object = {
foo: 'hello',
bar: { hello: '123', },
}
Und ich möchte sicherstellen, dass der Schlüssel der Leiste der Wert von foo sein muss .
interface ObjectType = {
foo: string;
bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}
Vielen Dank! :) :)
Antworten
5 AluanHaddad Aug 15 2020 at 23:39
Sie benötigen ein Generikum, um den Typ einer bestimmten Zeichenfolge zu erfassen
interface ObjectType<K extends string> {
foo: K;
bar: { [P in K]: string };
}
Dann kannst du schreiben
const object: ObjectType<'hello'> = {
foo: 'hello',
bar: { hello: '123', },
};
Wenn Sie über eine Funktion verfügen, die ein solches Objekt übernimmt, können Sie die Schnittstelle über die Schnittstelle mit vollständiger Typinferenz erzwingen
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`
});
Spielplatz Link