Ngx-Mat-DateTimePicker的NgxMatLuxonAdapter不可变对象设值问题求解
解决方案
核心原因是你对NgxMatDateAdapter接口的方法签名理解有误,该库的时间设置类方法设计完全兼容Luxon的不可变特性,不需要修改原对象:
- 修正方法返回类型
这三个set方法的返回类型并不是void,而是泛型T(即你适配的DateTime类型),你只需要返回修改后的新DateTime实例即可,正确实现如下:setHour(date: DateTime, value: number): DateTime { return date.set({ hour: value }); } setMinute(date: DateTime, value: number): DateTime { return date.set({ minute: value }); } setSecond(date: DateTime, value: number): DateTime { return date.set({ second: value }); } - 补充必要的模块配置
确保你在对应模块的providers中正确注册了自定义Adapter和对应的日期格式配置:import { NGX_MAT_DATE_ADAPTER } from '@angular-material-components/datetime-picker'; import { MyDateAdapter } from './path-to-your-adapter'; // 可直接复用项目中已有的Luxon日期格式配置 export const LUXON_DATE_FORMATS = { parse: { dateInput: 'yyyy-MM-dd HH:mm:ss', }, display: { dateInput: 'yyyy-MM-dd HH:mm:ss', monthYearLabel: 'yyyy年MM月', dateA11yLabel: 'yyyy-MM-dd HH:mm:ss', monthYearA11yLabel: 'yyyy年MM月', } }; @NgModule({ providers: [ { provide: NGX_MAT_DATE_ADAPTER, useClass: MyDateAdapter }, { provide: MAT_DATE_FORMATS, useValue: LUXON_DATE_FORMATS } ] }) export class YourModule {}
如果你使用的是旧版本库,接口确实定义为void返回,直接升级到@angular-material-components/datetime-picker的最新稳定版即可,旧版本的接口设计存在缺陷,已在后续版本优化适配了不可变日期库的使用场景。
内容的提问来源于stack exchange,提问作者clash
相关产品推荐
相关产品推荐

