如何解决在Angular 11中扩展Angular DatePipe错误在Angular 10中有效
最初,我对DatePipe进行了简单扩展,以转换标准(YYYYMMDD格式)中的日期值,以便Angular中的DatePipe可以使用它。
export class SlsDatePipe extends DatePipe implements PipeTransform {
constructor(Locale:string) {
super(Locale);
}
/**
* Convert the data from the numeric YYYYMMDD to the Javascript date format
* @param DateValue SLS Formatted number in the YYYYMMDD style
* @param args Angular Date Pipe args to control the output format
* @returns Text output following the Javascript date() formats
*/
public transform(DateValue:number,args:string):string | null {
const DateString:string = DateValue.toString();
const Year:number = parseInt(DateString.substr(0,4),10);
const Month:number = parseInt(DateString.substr(4,2),10) - 1;
const Day:number = parseInt(DateString.substr(6,10);
const DateObject:Date = new Date(Year,Month,Day);
return super.transform(DateObject,args);
}
在类中还进行了一些其他检查,以检查格式是否正确,等等,但是问题的基本知识在那里。这在Angular 10中有效。我刚刚更新到Angular 11,现在代码在转换中产生错误:
error TS2416: Property 'transform' in type 'SlsTimePipe' is not assignable to the same property in base type 'DatePipe'.
Type '(TimeValue: number,args: string) => string' is not assignable to type '{ (value: string | number | Date,format?: string,timezone?: string,locale?: string): string; (value: null,locale?: string): null; (value: string | number | Date,for mat?: string,locale?: string): string; }'.
Type 'string' is not assignable to type 'null'.
解决方法
Angular 11带来了stricter types for DatePipe,其中使用了方法重载。
您可以通过为transform
方法添加重载来使TypeScript编译器平静下来:
transform(DateValue: null | undefined,args?: string): null;
transform(DateValue: number,args: string): string | null {
...
}
,
Yurzui的答案对我不起作用。与之抗争了一段时间之后,我决定告诉TypeScript使用以下命令:
transform(value: string | number | Date,timezone: string = null): any {
return super.transform(value,DATE_FORMATTING_STRING,timezone);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。