Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 财产';getWeek';不存在于类型';日期';打字_Javascript_Typescript - Fatal编程技术网

Javascript 财产';getWeek';不存在于类型';日期';打字

Javascript 财产';getWeek';不存在于类型';日期';打字,javascript,typescript,Javascript,Typescript,我试图从给定的日期范围计算一周的开始日期和结束日期 下面的代码给出了此错误[ts]属性“getWeek”在类型“Date”上不存在。 您需要使用接口合并在Date接口上声明方法 declare global { interface Date { getWeek (start?: number) : [Date, Date] } } Date.prototype.getWeek = function(start) { start = start || 0;

我试图从给定的日期范围计算一周的开始日期和结束日期

下面的代码给出了此错误
[ts]属性“getWeek”在类型“Date”上不存在。


您需要使用接口合并在
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]
}

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

interface Date {
    getWeek(start): Array<Date>;
}

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

您必须增加
日期
界面:

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

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

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

我在JSFIDLE中尝试过它,它可以工作?TypeScript对所有基本对象都有定义。所以,当您向prototype添加属性时,您还需要更新它的index.d.ts文件,它也可以在控制台中为我工作。(铬)
  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 | undefined) => [Date, Date];
}