Как использовать литералы шаблона (строки шаблона), используемые для возврата объекта var - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть набор констант. Я пытаюсь создать простой вспомогательный метод env для возврата этих констант, как показано ниже. Я вижу, вы можете использовать литералы шаблона (строки шаблона) для анализа переменных, но я не могу заставить это работать.

Возможно ли это или есть лучший способ сделать это?

export default {

    env(constant: any) {
        return `${TEST_VARS}.${constant}`;
    }
}

export const TEST_VARS = {
    DB_CONFIG: {
        db_name: 'test.db',
        db_location: '_default'
    }
}

// how do I return test.db from this is that possible?

console.log(default.env('DB_CONFIG.db_name'));  // test.db.  

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Редактировать: Я полностью упустил важный момент, как вы работаете с ним:

Я бы рекомендовал использовать функцию get loda sh https://lodash.com/docs/4.17.15#get, так как она супер удобно и делает в точности то, что вы хотите.

 export default {

    env(constant: any) {
        return _.get(TEST_VARS,constant);
    }
}

Старый ответ:

Попробуйте это. Доступ к вычисляемым свойствам великолепен и значительно упростит доступ к свойствам с помощью переменной. Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors

 export default {

    env(constant: any) {
        return TEST_VARS[constant];
    }
}
1 голос
/ 05 апреля 2020

Вы можете создать функцию доступа и вызывать ее внутри литерала шаблона

const keyUnifier = key => key.replace(/(\w+)\[(\d+)\]/g, "$1" + ".$2")
  .replace(/\[([^\]]+)\]/g, ".$1")
  .split('.')

function accessor(key) {
  let temp = TEST_VARS
  let keyArr = keyUnifier(key)
  while (keyArr.length) {
    if (typeof temp === 'object') {
      temp = temp[keyArr[0]]
      keyArr.shift()
    } else {
      temp = 'Not found'
      keyArr = []
    }
  }
  return temp
}

function env(keyPath) {
  return `${accessor(keyPath)}`;
}
const TEST_VARS = {
  DB_CONFIG: {
    db_name: 'test.db',
    db_location: '_default',
    db_arr: [
      "db_key",
      {
        deep: "Key"
      }
    ]
  }
}

console.log(env('DB_CONFIG.db_name'));
console.log(env('DB_CONFIG.db_name.newKey'));
console.log(env('DB_CONFIG.db_arr[1].deep'));
console.log(env('DB_CONFIG.db_arr[1][deep]'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...