Javascript разбивает текст на несколько строк с сохранением отступа

#javascript

#javascript

Вопрос:

У меня есть следующая функция

 const taskErrorMessage = (task, reason) => {
    const account = task.account;
    return {
        message: `ERROR. ACTION: ${task.action}. ACCOUNT: ${account._id}, 
${account.name}. REASON: ${reason}. DATE: 
${new Date()}`
    }
}
  

Он не помещается в одну строку, поэтому я разбиваю его с помощью однако кажется, что если я попытаюсь добавить отступ, конечная строка будет неверной с нежелательными пробелами. Есть ли способ разбить строку на несколько строк с сохранением отступа?

Комментарии:

1. Нужно ли это решать в javascript? Или мы можем использовать HTML и CSS?

Ответ №1:

Для простых шаблонных литералов пробелы в начале строк всегда интерпретируются буквально, поэтому их нельзя использовать для отступа кода.

Если вы хотите, чтобы все пробелы были свернуты, вы могли бы имитировать эту функциональность с помощью помеченного литерала шаблона:

 const $_ = (strings, ...vals) => {
    let result = ''

    strings.forEach((str, idx) => {
        result  = str
        if (typeof vals[idx] !== 'undefined')
            result  = vals[idx]
    })

    return result.trim().replace(/s /g, ' ')
}

console.log(
    $_`hooray
          indents for    every
                               ${1}
    `
)  

Однако обратите внимание, что это будет выполняться во время выполнения, а не во время компиляции. Вряд ли это будет узким местом в производительности, если вы не создаете сотни тысяч строк таким образом, но все равно стоит подумать.

Комментарии:

1. Я пробовал буквальные разрывы строк, и это нарушает строку, которая мне не нужна

2. Я отредактировал свой ответ с возможным решением, если вы не возражаете против снижения производительности.