如何修复TS2339错误:类型'Moment'不存在属性'tz'?
解决moment-timezone的TypeScript类型错误问题
问题原因
你遇到的TS2339错误是因为TypeScript无法识别moment-timezone扩展的tz方法,根源在于类型定义不匹配或导入方式错误。
解决方案
1. 安装匹配版本的类型定义包
你的moment-timezone版本是0.5.23,需要安装对应版本的类型包,避免版本不兼容:
npm install @types/moment-timezone@0.5.23 --save-dev
2. 修正导入语句
将Moment类型的导入来源从moment改为moment-timezone——因为moment-timezone扩展了原生Moment类型,添加了tz方法:
import * as moment from 'moment-timezone'; import { Moment } from 'moment-timezone'; // 替换原有的import {Moment} from 'moment';
3. 调整方法逻辑(更规范写法)
moment对象的tz方法会返回新的Moment实例,且local()调用是多余的(tz()会直接转换到指定时区),建议修改代码如下:
public parseDatetime(datetime:string, format?:string): Moment { let d = moment.utc(datetime, format); if (this.ConfigurationService.isTimezoneSet()) { d = d.tz(this.ConfigurationService.timezone()); } return d; }
4. 确保TypeScript配置包含类型包
检查项目根目录的tsconfig.json,在compilerOptions中添加moment-timezone到类型列表:
{ "compilerOptions": { // 其他配置... "types": ["moment", "moment-timezone"] } }
5. 清理缓存后重新编译
针对Rails环境,先清理旧资产缓存再重新预编译:
bundle exec rake assets:clobber bundle exec rake assets:precompile
内容的提问来源于stack exchange,提问作者Shruthi R
相关产品推荐
相关产品推荐

