最初,我有一个看起来像这样的函数

import { CustomDate } from './../models/customDate';

export class DateService {

    datePickerResultToDate(date: Date) {

        var myDate: CustomDate;

        var month_str: string;

        switch (date.getMonth()) {
            case 0:
                month_str = 'Jan';
                break;
            case 1:
                month_str = 'Feb';
                break;
            // etc...
            default:
                month_str = 'Some Error';
        }

        myDate.day = date.getDate();
        myDate.month = date.getMonth();
        myDate.year = date.getFullYear();
        myDate.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();

        return myDate
    }

}


哪里

export class CustomDate {
    day: number;
    month: number;
    year: number;
    customDateString: string;
}


执行后,我收到此错误


  error_handler.js:54例外:./ TimeSheetComponent类TimeSheetComponent中的错误-内联模板:16:8由以下原因引起:无法设置未定义的属性“ day”


所以我想我需要更改为

    var myDate: CustomDate = {
        day: 0,
        month: 0,
        year: 0,
        customDateString: ''
    }


并修复它。我的问题是,每次我要使用myDate初始化这些值似乎很奇怪。有没有一种方法可以简化此过程,以便在我要使用myDate时已被初始化并可以使用?还是我每次都要这样做?

最佳答案

之所以收到该错误,是因为您没有初始化CustomDate类,而只是将myDate变量设置为CustomDate类型。而是应该具有CustomDate的实例化对象

var myDate: CustomDate = new CustomDate();


要么

为了减少实例化类时的工作量,尽管只需要将Date对象传递给CustomDate构造函数,就可以将所有常见的东西移到类中。

export class CustomDate {
    day;
    month;
    year;
    customDateString: Date;
    constructor(Date date) {
       this.day = date.getDate();
       this.month = date.getMonth();
       this.year = date.getFullYear();
       this.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();

    }
}


然后执行以下操作。

var myDate: CustomDate = new CustomDate(date);

10-07 14:56