Компилятор Karma или TypeScript сказал мне, что свойство 'padStart' не существует для типа 'String' - PullRequest
0 голосов
/ 27 марта 2019

У меня есть проект Angular 7 с lib = es2015 и target = es2015, компиляцией Angular-CLI и запущенным приложением все в порядке.Однако при запуске модульных тестов с ng test компилятор Karma или TypeScript сказал мне, что свойство 'padStart' не существует для типа 'String'

27 03 2019 10:40:57.424:INFO [karma-server]: Karma v4.0.1 server started at http://0.0.0.0:9876/
27 03 2019 10:40:57.424:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
27 03 2019 10:40:57.429:INFO [launcher]: Starting browser Chrome
ERROR in node_modules/@azure/storage-blob/lib/utils/utils.common.ts(300,24): error TS2339: Property 'padStart' does not exist on type 'String'.
node_modules/@azure/storage-blob/lib/utils/utils.common.ts(301,26): error TS2339: Property 'padStart' does not exist on type 'string'.

При проверке кодов сбоя, как указано в сообщении об ошибке:

export function padStart(
  currentString: string,
  targetLength: number,
  padString: string = " "
): string {
  if (String.prototype.padStart) {
    return currentString.padStart(targetLength, padString);
  }
...

Я считаю, что последние 2 строки кода выглядят для меня совершенно нормально, так как я понимаю, что padStart определен в es2017, так что программисты библиотеки создали их.Если в tsconfig.json у меня lib = es2017 и target = es2015, компиляция теста ng в порядке.

Мне нравится выяснять причину проблемы, и подозреваемыми являются: Компилятор скриптов типа, KarmaУгловой компилятор или обидные коды.Какой из них вы думаете?

1 Ответ

0 голосов
/ 27 марта 2019

Если в tsconfig.json у меня есть lib = es2017 и target = es2015, компиляция теста ng в порядке

Это правильное исправление. padStart поставляется только с ES2017: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

enter image description here

...