Предотвращение разрывов строк в шаблонной строке ES6

ESLint: строка 403 превышает максимальную длину строки 120 (max-len)

У меня есть длинная строка, которую я построил, используя строки шаблона ES6, но я хочу, чтобы она была без разрывов строк:

var string = `Let me be the 'throws Exception’ to your 'public static void 
              main (String[] args)’. I will accept whatever you give me my ${love}.`
console.log(string);

Результат:

 Let me be the 'throws Exception’ to your 'public static void 
 main (String[] args)’. I will accept whatever you give me xxx.

Мое ожидание:

Let me be the 'throws Exception’ to your 'public static void main (String[] args)’. I will accept whatever you give me xxx.

Требования:

  1. Я не могу отключить правило eslint, так как принудительное выполнение необходимо.

  2. Я не могу поместить данные в отдельный файл, так как данные являются динамическими.

  3. Я не могу объединить несколько более коротких строк, так как это слишком много работы.

4 ответа

Решение

Это ожидаемое поведение. Одной из важных проблем, которые решают литералы шаблона, являются многострочные строки:

Любые символы новой строки, вставленные в источник, являются частью литерала шаблона.

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

var string = `Let me be the 'throws Exception’ to your 'public static void 
              main (String[] args)’. I will accept whatever you give me.`
              .replace(/[\n\r]+ */g, ' ');

String.raw встроенная функция для преобразования литералов шаблона. Можно использовать функцию тега для обеспечения настраиваемого поведения литералов шаблона. Следует отметить, что String.raw отличается от шаблона преобразования по умолчанию с точки зрения того, как он обрабатывает специальные символы. Если они используются в строке, они должны быть дополнительно обработаны с unescape-js или аналогичная вспомогательная функция.

function singleLine(strsObj, ...values) {
  const strs = strsObj.raw
  .map(str => str.replace(/[\n\r]+ */g, ' '))
  .map(unescapeSpecialChars);
  return String.raw(
    {raw: strs },
    ...values
  );
}


var string = singleLine`Let me be the 'throws Exception’ to your 'public static void 
              main (String[] args)’. I will accept whatever you give me.`;

Хороший способ достичь своей цели - присоединить массив строк:

var string = [
  `Let me be the 'throws Exception’ to your 'public static void`,
  `main (String[] args)’. I will accept whatever you give me my ${love}.`
].join(' ');

Используйте также конкатенацию строк:

var string=`abc`+`def`;
console.log(string);

выходы:

abcdef

Если ваша проблема - просто ошибка EsLint, вы можете игнорировать ее для этой конкретной строки, используя эту функцию: /* eslint-disable max-len */

По моему честному мнению это лучший подход, потому что вы не даете дополнительной сложности.

Если вы начинаете использовать регулярное выражение или конкатенацию, вы меняете назначение строки шаблона, не используя конкатенацию...

Другие вопросы по тегам