分享
三行代码  ›  专栏  ›  技术社区  ›  andreoss

如何在typescript映射方法内使用javascript查找表?

  •  1
  • andreoss  · 技术社区  · 1 周前

    如何使用简单的JavaScript lookup table (映射本身是什么)在map函数中? 一、 我怎么才能摆脱这个 "code" 字段(借用自 here ),并且只使用内部的查找表 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("")
            )
        }
    }
    
    1 回复  |  直到 1 周前
        1
  •  0
  •   Justin Beckwith    1 周前

    很难确切地知道你在找什么,但是一眼。。。你可以!您应该能够:

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

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

    现在,TypeScript编译器有时会对这类事情发脾气。您可能需要执行以下操作才能使编译器满意:

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

    Object.keys 以及 Array.join

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

    希望这有帮助!