TypeScript:別のプロパティに依存するインターフェイスプロパティ
別のプロパティに依存するインターフェイスプロパティを入力することは可能ですか?
たとえば、私は持っています:
const object = {
foo: 'hello',
bar: { hello: '123', },
}
そして、barのキーがfooの値でなければならないことを確認したいと思います。
interface ObjectType = {
foo: string;
bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}
ありがとう!:)
回答
5 AluanHaddad
特定の文字列のタイプをキャプチャするには、ジェネリックが必要です
interface ObjectType<K extends string> {
foo: K;
bar: { [P in K]: string };
}
その後、あなたは書くことができます
const object: ObjectType<'hello'> = {
foo: 'hello',
bar: { hello: '123', },
};
または、そのようなオブジェクトを受け取る関数がある場合は、インターフェイスを使用して、完全な型推論でルールを適用できます。
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`
});
遊び場リンク