TypeScript: uma propriedade de interface dependente de outra
é possível digitar uma propriedade de interface dependente de outra?
Por exemplo, tenho:
const object = {
foo: 'hello',
bar: { hello: '123', },
}
E quero ter certeza de que a chave de bar deve ser o valor de foo .
interface ObjectType = {
foo: string;
bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}
Obrigado! :)
Respostas
5 AluanHaddad
Você precisa de um genérico para capturar o tipo de uma string específica
interface ObjectType<K extends string> {
foo: K;
bar: { [P in K]: string };
}
Então você pode escrever
const object: ObjectType<'hello'> = {
foo: 'hello',
bar: { hello: '123', },
};
Ou, se você tiver uma função que usa esse objeto, você pode usar a interface para aplicar a regra com inferência de tipo
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`
});
Link do parque
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino