#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. Спасибо, чувак, что сделал это!