如何使用全局扩充扩展TypeScript 1.8中的本机JavaScript类型?

如何使用全局扩充扩展TypeScript 1.8中的本机JavaScript类型?,typescript,typescript1.8,Typescript,Typescript1.8,我正试图使用TypeScript 1.8中新的全局扩展来扩展本机JavaScript类型,如前所述。但是,当扩展函数返回相同类型时,我遇到了问题 Global.ts export {}; declare global { interface Date { Copy(): Date; } } if (!Date.prototype.Copy) { Date.prototype.Copy = function () { return new

我正试图使用TypeScript 1.8中新的全局扩展来扩展本机JavaScript类型,如前所述。但是,当扩展函数返回相同类型时,我遇到了问题

Global.ts

export {};
declare global {
    interface Date {
        Copy(): Date;
    }
}

if (!Date.prototype.Copy) {
    Date.prototype.Copy = function () {
        return new Date(this.valueOf());
    };
}
export class DateHelper {
    public static CopyDate(date: Date): Date {
        return date.Copy();
    }
}
DateHelper.ts

export {};
declare global {
    interface Date {
        Copy(): Date;
    }
}

if (!Date.prototype.Copy) {
    Date.prototype.Copy = function () {
        return new Date(this.valueOf());
    };
}
export class DateHelper {
    public static CopyDate(date: Date): Date {
        return date.Copy();
    }
}
尝试使用DateHelper.ts中定义的扩展名时遇到以下错误TS2322:

Type 'Date' is not assignable to type 'Date'.
Property 'toDateString' is missing in type 'Date'.

有人知道如何解决这个问题吗?

您可以这样做:

Global.ts:

interface Date 
{
    Copy: () => Date;
}

Date.prototype.Copy = function() 
{
    return new Date(this.valueOf());
};
在DateHelper.ts中

import './Global';

export class DateHelper {
    public static CopyDate(date: Date): Date {
        return date.Copy();
    }
}

谢谢,在您执行类似操作之前,这实际上是可行的:从“PrototypeExtensions”导入{谓词、选择器、操作、比较器、字典、组};声明全局{interface Date{Copy:()=>Date;}}}Date.prototype.Copy=function(){返回新日期(this.valueOf());};当您这样做时,您需要添加declare global部分,这反过来会导致TS2322错误。谢谢,我将使用这种方法,直到找到利用全局扩充的解决方案。