Проблема с расширенной десятичной трубой после обновления до угловой 11

#angular #angular11

Вопрос:

Обновление с углового 10 до 11 и проблема с расширением, которое у нас есть на десятичной трубе.

Код трубы:

  export class CustomNumberFormatPipe extends DecimalPipe implements PipeTransform {

 transform(value: string): string | null {
    if (!value) {
        return null;
    }
    value = value.toString().replace(/,/g, '');
    return super.transform(value);
}
 

и ошибка:

  Property 'transform' in type 'CustomNumberFormatPipe' is not assignable to the same property in base type 'DecimalPipe'.
 Type '(value: string) => string' is not assignable to type '{ (value: string | number, 
 digitsInfo?: string, locale?: string): string; (value: null, digitsInfo?: string, locale?: 
 string): null; (value: string | number, digitsInfo?: string, locale?: string): 
 string; }'.
 Type 'string' is not assignable to type 'null'.
 

и определение десятичного типа:

  export declare class DecimalPipe implements PipeTransform {
   private _locale;
   constructor(_locale: string);
   transform(value: number | string, digitsInfo?: string, locale?: string): string | null;
   transform(value: null | undefined, digitsInfo?: string, locale?: string): null;
   transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null;
   static ɵfac: ɵngcc0.ɵɵFactoryDef<DecimalPipe, never>;
   static ɵpipe: ɵngcc0.ɵɵPipeDefWithMeta<DecimalPipe, "number">;
 

}

Единственное решение, которое я нашел до сих пор, — это изменить общую десятичную трубу, но я не очень уверен в этом. Заранее спасибо.

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

1. Попробуйте изменить это transform(value: string): string на это transform(value: string): string | null .

2. Учитывая , что DecimalPipe теперь принимает value это null , ваш подкласс тоже должен. У вас уже есть логика для этого в реальной реализации, просто добавьте ее в определение типа.

3. @R. Ричардс, попробовал это, но получил ту же ошибку

Ответ №1:

просто перейдите к DecimalPipe декларации и скопируйте ее transform подпись в свою трубу:

 transform(value: number | string, digitsInfo?: string, locale?: string): string | null;
transform(value: null | undefined, digitsInfo?: string, locale?: string): null;
transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null {
    if (!value) {
        return null;
    }
    value = value.toString().replace(/,/g, '');
    return super.transform(value);
}
 

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

1. @D Pro, я добавил определение к вопросу, я не уверен, какое из них добавить

2. все они. Я обновил свой ответ, пожалуйста, проверьте

3. Спасибо, чувак, что сделал это!