typescript - 如何使用全局扩充在 TypeScript 1.8 中扩展原生 JavaScript 类型?

标签 typescript typescript1.8

我正在尝试使用 TypeScript 1.8 中的新全局扩充来扩展原生 JavaScript 类型,如 here 所述.但是,当扩展函数返回相同类型时,我遇到了问题。

Global.ts

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

if (!Date.prototype.Copy) {
    Date.prototype.Copy = function () {
        return new Date(this.valueOf());
    };
}

DateHelper.ts

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'.

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

最佳答案

你可以这样做:

全局.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();
    }
}

关于typescript - 如何使用全局扩充在 TypeScript 1.8 中扩展原生 JavaScript 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910521/

相关文章:

angular - 继承和依赖注入(inject)

未找到 Firebase 功能的 Typescript 声明

javascript - 如何仅获取 dynamoDB 流上的差异/修改

typescript - 在 TypeScript 接口(interface)中覆盖/覆盖方法签名

typescript - 中型大型 typescript 项目: build performance problems

typescript - 在 TypeScript 中共同组织类/模块

javascript - 如何使用当前的 Form API 将父组件的 FormGroup 传递给其子组件

javascript - 如何将 Angular 4 集成到 Rails 应用程序中?Rails 中 Angular 的实际文件夹结构是什么?

c# - 编译转换 : The type 'Object' is defined in an assembly that is not referenced

angularjs - Angular 指令使用 Typescript 接收对象作为属性