我正在尝试从给定的日期范围计算一周的开始日期和结束日期。
下面的代码给了我这个错误[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();
答案 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();