在Typescript中类型'Date'上不存在属性'getWeek'

时间:2018-04-17 10:23:38

标签: javascript typescript

我正在尝试从给定的日期范围计算一周的开始日期和结束日期。

下面的代码给了我这个错误[ts] Property 'getWeek' does not exist on type 'Date'.

  Date.prototype.getWeek = function(start)
{
    start = start || 0;
    var today = new Date(this.setHours(0, 0, 0, 0));
    var day = today.getDay() - start;
    var date = today.getDate() - day;

    var StartDate = new Date(today.setDate(date));
    var EndDate = new Date(today.setDate(date + 6));
    return [StartDate, EndDate];
}

var Dates = new Date().getWeek();

3 个答案:

答案 0 :(得分:2)

您需要使用接口合并<{p>>在Date接口上声明方法

declare global {
    interface Date {
        getWeek (start?: number) : [Date, Date]
    }
}
Date.prototype.getWeek = function(start)
{
    start = start || 0;
    var today = new Date(this.setHours(0, 0, 0, 0));
    var day = today.getDay() - start;
    var date = today.getDate() - day;

    var StartDate = new Date(today.setDate(date));
    var EndDate = new Date(today.setDate(date + 6));
    return [StartDate, EndDate];
}

var Dates = new Date().getWeek();

或者如果您不使用模块:

interface Date {
    getWeek (start?: number) : [Date, Date]
}

答案 1 :(得分:1)

Date被TypeScript声明为已知接口。 getWeek不是Date a的属性,因此不会让您获取或修改它。

您必须扩充Date界面:

添加新的global.d.ts文件。在其中:

interface Date {
    getWeek: (start: number | undefined) => [Date, Date];
}

然后,TypeScript将混合两个声明,因此它将识别getWeek的存在,您可以在代码中定义它(另一个文件,因为声明文件不能包含语句)

答案 2 :(得分:0)

这是因为typescript处理扩展的方式。您可以通过修改Date这样的界面来修复您的问题:

interface Date {
    getWeek(start): Array<Date>;
}
  Date.prototype.getWeek = function(start)
{
    start = start || 0;
    var today = new Date(this.setHours(0, 0, 0, 0));
    var day = today.getDay() - start;
    var date = today.getDate() - day;

    var StartDate = new Date(today.setDate(date));
    var EndDate = new Date(today.setDate(date + 6));
    return [StartDate, EndDate];
}

var Dates = new Date().getWeek();