Búsqueda de sitios web

¿Cómo usar una tabla de consulta de JavaScript dentro del método map de TypeScript?


¿Cómo puedo usar una tabla de búsqueda simple de JavaScript (que es el propio mapeo) dentro de la función map? Es decir, ¿cómo puedo deshacerme de este campo "code" (tomado de aquí) y usar solo la tabla de búsqueda dentro del método map?

const Resistors = {
    "black": 0,    "brown": 1,    "red": 2,
    "orange": 3,   "yellow": 4,   "green": 5,
    "blue": 6,     "violet": 7,   "grey": 8,
    "white": 9,

    // Why not Resistors[color]
    "code" : (color: string) => {
        function valueOf<T, K extends keyof T>(obj: T, key: K) {
            return obj[key];
        }
        return valueOf(Resistors, color as any);
    }
}
class ResistorColor {
    private colors: string[];
    constructor(colors: string[]) { this.colors = colors; }
    value = () => {
        return Number.parseInt(
            this.colors
                  .map(Resistors.code) // How can i get rid of .code here?
                  .join("")
        )
    }
}

Respuesta #1

Es un poco difícil saber exactamente qué estás buscando, pero a primera vista... ¡puedes! Deberías poder hacer:

const Resistors = {
  black: 0,
  brown: 1,
}

Y luego...

const numericColorCode = Resistors['black'];
console.log(numericColorCode) // should be 0

Ahora, a veces el compilador de TypeScript puede ponerse gruñón con este tipo de cosas. Puede que necesites hacer algo como esto para que el compilador esté contento:

const numericColorCode = (Resistors as {[index: string]: number})['black'];

En cuanto a tu pregunta más abajo, ¡usa Object.keys y un Array.join!

const allTheColors = Object.keys(Resistors).join(',');
console.log(allTheColors); // should be 'black,brown'

¡Espero que esto ayude!

Respuesta #2

Además de - y basado en - la respuesta de Justin, aquí hay otro ejemplo sobre dónde definir tus tipos:

const messages: {[index: string]: string} = {
  'required': 'The value is required',
  'minimumValue': 'The value is not large enough'
}

const validationErrorType = 'required';
const messageToUser = messages[validationErrorType];

Artículos relacionados