function getTargetValue(targetSelector, propName, unit) {
  const targets = registerTargets(targetSelector);
  if (!targets.length) return;
  const [ target ] = targets;
  const tweenType = getTweenType(target, propName);
  const normalizePropName = sanitizePropertyName(propName, target, tweenType);
  let originalValue = getOriginalAnimatableValue(target, normalizePropName);
  if (isUnd(unit)) {
    return originalValue;
  } else {
    decomposeRawValue(originalValue, decomposedOriginalValue);
    if (decomposedOriginalValue.t === valueTypes.NUMBER || decomposedOriginalValue.t === valueTypes.UNIT) {
      if (unit === false) {
        return decomposedOriginalValue.n;
      } else {
        const convertedValue = convertValueUnit(/** @type {DOMTarget} */(target), decomposedOriginalValue, /** @type {String} */(unit), false);
        return `${round(convertedValue.n, globals.precision)}${convertedValue.u}`;
      }
    }
  }
}
@overload
@param  {DOMTargetSelector} targetSelector
@param  {String}            propName
@return {String}

@overload
@param  {JSTargetsParam} targetSelector
@param  {String}         propName
@return {Number|String}

@overload
@param  {DOMTargetsParam} targetSelector
@param  {String}          propName
@param  {String}          unit
@return {String}

@overload
@param  {TargetsParam} targetSelector
@param  {String}       propName
@param  {Boolean}      unit
@return {Number}

@param  {TargetsParam}   targetSelector
@param  {String}         propName
@param  {String|Boolean} [unit]