Talvez precise obter o tipo de argumento, mas não sei o que fazer
function converArrayToObject(keys) {
return keys.reduce((prev, key) => ({ ...prev, [key]: key}), {})
}
const result = converArrayToObject(['aa', 'bb']);
// expected result type : `{ aa: string, bb: string }`
Você pode refatorar
convertArrayToObject()
para aceitar um parâmetro genérico que pode ser usado para inferir o tipo de retorno. Infelizmente, você terá que usar Type Assertion para o valor inicial de.reduce()
corresponder ao tipo de retorno. Certifique-se de passar sua matriz de argumentosas const
para que os valores possam ser inferidos corretamente e não apenas comostring
.Link do Playground
Você precisará usar o parâmetro de tipo const para evitar que o compilador amplie o tipo da matriz passada para
string[]
.Observe que os parâmetros de tipo const estão disponíveis na versão Typescript
5.0
. Para as versões anteriores, a solução possível, mas um pouco irritante, é usar a asserção const , como é feito na resposta do @BehemothAgora, precisamos digitar o
reduce
, que deve ser um objeto onde as chaves são os elementos do array e os valores são strings regulares.Para obter o tipo de elementos, precisaremos usar o acesso indexado :
Vamos adaptá-lo ao objeto que precisamos:
Parece bom!
Vamos declarar o valor inicial de reduzir para este tipo:
Teste:
Parque infantil