在Typescript中未调用被重写的方法(Angular项目)

5ktev3wc  于 2023-04-07  发布在  TypeScript
关注(0)|答案(1)|浏览(137)

我试图从第三方类重写一个公共方法,但它没有调用重写方法。
方法签名是相同的,我什至使用了override关键字并设置了'noImplicitOverride'标志ts.config来确认我的方法实际上是覆盖了super的方法。但它仍然调用super的方法(位于node modules下的mjs文件中)而不是覆盖方法。

更多详细信息

我正在做一个Angular项目,我们正在使用Material DateTimePickers。我们最近用Luxon替换了Moment。Material提供了一个LuxonDateAdapter来使用Luxon及其DateTimePickers(@angular/material-luxon-adapter),但不幸的是,它不支持时间,只支持日期,所以我不得不为Luxon创建自己的DateTimeAdapter,名为MatLuxonDateTimeAdapter,它扩展了LuxonDateAdapter。然后,我手动添加了所有缺少的解析/格式化功能,以处理时间。
这一切都进行得很顺利,直到我意识到LuxonDateAdapter中的'parse'方法没有按照我们想要的方式运行。没问题,我只是重写该方法并调整它。不幸的是,这就是问题的开始。即使LuxonDateAdapter的parse方法是公共的,当我重写它时,它似乎完全忽略了我的override方法,而是调用super的。

在我的MatLuxonDatetimeAdapter类中

@Injectable()
export class MatLuxonDatetimeAdapter extends LuxonDateAdapter {

  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string,
    @Inject(MAT_LUXON_DATE_ADAPTER_OPTIONS) options: MatLuxonDateAdapterOptions) {
    super(matDateLocale, options);
  }

 override parse(value: any, parseFormat: string | string[]): DateTime | null {
    console.log('This isn't being called!)'
    return null;
  }

 //... other methods which probably aren't relevant
}

在LuxonDateAdapter的类声明中

export declare class LuxonDateAdapter extends DateAdapter<DateTime> {

parse(value: any, parseFormat: string | string[]): DateTime | null;

//... other method declarations which probably aren't relevant
}

我不明白为什么它不调用我的重写方法。

wvt8vs2t

wvt8vs2t1#

解决了!
Material同时有一个DatetimeAdapter和一个DateAdapter。如果datepicker只使用日期,它使用DateAdapter。如果它同时使用日期和时间,它使用DatetimeAdapter。在我的模块中,我只提供了DatetimeAdapter实现。因为我的datepicker只使用日期,我的DatetimeAdapter类甚至没有被使用。

相关问题