Angular 9 Ivy build - ошибки расширения - PullRequest
1 голос
/ 24 февраля 2020

Доброе утро!

Я недавно обновил проект v8 до v9, и, похоже, он работает нормально. Однако у меня есть некоторые расширения, и компилятор выдает о них некоторые ошибки, чего не происходит в другом проекте, который я также недавно обновил.

Расширения являются базовыми c для обоих конструкторов. и прото. Они настроены нормально - одна и та же установка работает в нескольких проектах, в которых я их использую. Важно, что они отлично работают без каких-либо ошибок в другом обновленном проекте.

Однако, чтобы получить базовые c подтверждения использования для всего пути:

Добавление iface к typings.d.ts, например

interface StringConstructor {
  isNullOrEmpty(str: string): boolean;
}  
interface String {
  padStartWithChar(char: string, totalSize: number): string;
}

Реализация, например

export {};

String.isNullOrEmpty = function(str: string): boolean {
  // ...
};

String.prototype.padStartWithChar = function(this: string, char: string, totalSize: number): string {
  // ...
}

И импорт в main.ts

// ...
import './extensions/string-extensions';
// ...

Мои пути не изменились, все они указывают на все нужные файлы во всех нужных местах, которые я могу подумать, чтобы проверить их (src/typings.d.ts находится в sr c, где я его положил, tsconfig.app.ts включает его, как и прежде, et c. Et c.).

, что приводит к ошибкам сборки; Я получаю спам об ошибках для всех использований расширений, и сборка в итоге останавливается:

...

src/extensions/string-extensions.ts:9:8 - error TS2339: Property 'isNullOrEmpty' does not exist on type 'StringConstructor'.

9 String.isNullOrEmpty = function(str: string): boolean {

...

** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **

и пытается просмотреть результаты в сообщении Cannot GET/ basi c. Тем не менее, он выполняет обычную повторную сборку при сохранении файлов, в которой он снова показывает все эти сообщения об ошибках, но в этот раз все равно завершает сборку и работает.

Есть ли у кого-нибудь указание указать мне, что я могу пропустили? Между двумя проектами я проверил наличие значительных изменений между angular.json, tsconfig s, main.ts, et c. но пока что я выхожу пустым.

Спасибо.

Редактировать:

Отмена и попытка обновления снова, расширения ломаются на самом первом шаге обновления Руководство просто запустив небольшое обновление с ng update @angular/core@8 @angular/cli@8.

Начиная с этого обновления, оно умирает. Пропустив этот шаг (в любом случае, я уже запускаю приложение v8) и пытаясь перейти прямо на 9, он, к сожалению, также убивает его.

Обновление:

Кажется, что ответ Ричарда избавился от всех запретить сообщения об ошибках расширения даты. Кажется, ему вообще не нравится существование интерфейса DateConstructor, и, к тому же, он не особо радует использование moment при попытке его использования.

Обновление правки:

Все расширения даты выглядят точно так же, как и другие расширения, единственное отличие состоит в том, что там есть строка import moment from 'moment'. Удаление таких вещей, кажется, не имеет значения; это как Date s - это зверь, отличный от String s или Array s ...

1 Ответ

1 голос
/ 27 февраля 2020

Мне пришлось удалить export {}; из моего файла реализации (extensions.ts) и повторить интерфейс.

extensions.ts

interface String {
  format(...args: string[]): string;
  endsWith(searchString: string, position?: number): boolean;
}

if (!String.prototype.hasOwnProperty('format')) {
    String.prototype.format = function (...args: string[]): string {
        ...
    };
}

if (!String.prototype.hasOwnProperty('endsWith')) {
    String.prototype.endsWith = function (searchString, position) {
        ...
    };
}
...