Estoy usando un script de tipo y quiero crear un tipo que represente un objeto como este. Las claves generadas se generan dinámicamente. ¿Cómo hago eso?
{ dog:true, cat:true, x:true }actualmente solo estoy usando cualquiera, pero me gustaría un tipo adecuado
const matches: any= {}me sale este error cuando trato de usar
{[key: string]: boolean} Type 'string[] | { [key: string]: boolean; }' must have a '[Symbol.iterator]()' method that returns an iteratocódigo que causa este error
const docgetter=()=> const matches: { [key: string]: boolean } = {} const documentFieldKeys = Array.isArray(documentNames) ? documentNames : Object.keys(documentNames) return [matches, documentFieldKeys] } const [matches,kycKeys]=docgetter() for(key of kycKeys)Usando [key : string]
type dict = { [key : string] : boolean } const o: dict = { cat: true, dog: true, x: false }Editar:
no especificó un tipo para la salida de docgetter , por lo que TypeScript lo infirió incorrectamente como
const kycKeys: { [key: string]: boolean; } | string[]Puedes arreglar esto haciendo
for(const key of kycKeys as string[]) { console.log(key) }para que TypeScript sepa que está iterando una matriz y no un objeto (el objeto generaría un error)
O podría dejar que TypeScript sepa cuál es el resultado
versión fija de su código:
const documentNames = { "a": true, "b": true, "c": true } type output = [ { [key: string]: boolean }, string[] ] const docgetter=() : output => { const matches: { [key: string]: boolean } = {} const documentFieldKeys : string[] = Array.isArray(documentNames) ? documentNames : Object.keys(documentNames) return [matches, documentFieldKeys] } const [matches,kycKeys]=docgetter() for(const key of kycKeys) { console.log(key) }