Ok, então estou atualizando o TypeScript do wj-config (caso o caso real se torne relevante), e uma de suas funções é "expandir" uma chave (um valor de string que é dividido na presença de um separador) em um objeto. Exemplo: Key 'a.b.c'
expande para object { a: b { c: <value here> } }
.
Para uma única chave, criei o seguinte InflateKey
tipo:
export type InflateKey<TKey extends string, TValue, TSep extends string> = TKey extends `${infer Key}${TSep}${infer Rest}` ?
{
[K in Key]: InflateKey<Rest, TValue, TSep>
} :
{
[K in TKey]: TValue;
};
Este tipo funciona como esperado. Ótimo! Agora a próxima tarefa é aceitar um objeto cujas chaves são como a chave descrita acima. Exemplo:
const dic = {
'a.b': 1,
'a.c': 33,
'h.x': true,
'z.y': 'Hi'
};
// Now, through the application of a function, the result will look like:
const result = {
a: {
b: 1,
c: 33
},
h: {
x: true
},
z: {
y: 'Hi'
}
};
Preciso de ajuda para digitar este valor de retorno.
Minha linha de pensamento:
export type InflateDictionary<TDic extends Record<string, any>> = InflateKey<key1 of TDic,...> & ... & InflateKey<keyN of TDic,...>;
O acima, é claro, não é TypeScript válido.