在TypeScript中扩展接口

7

在JavaScript中,向任何类型的prototype添加函数和成员非常简单。我尝试在TypeScript中实现相同的功能,如下所示:

interface Date
{
    Minimum: Date;
}

Date.prototype.Minimum = function () { return (new Date()); }

这会产生以下错误:
Type '() => Date' is not assignable to type 'Date'.
Property 'toDateString' is missing in type '() => Date'.

考虑到TS是强类型语言,我们如何实现这一点?

由于我正在用TS编写自定义实用程序库,所以我不想求助于JS。

2个回答

26

接口不会被转译成JS,它们只是用于定义类型。

您可以创建一个新接口,该接口将继承第一个接口:

interface IExtendedDate extends Date {
    Minimum: () => Date;
}

但是对于实际的实现,你需要定义一个。例如:

class ExtendedDate implements IExtendedDate {
    public Minimum(): Date {
        return (new ExtendedDate());
    }
}

请注意,您可以在没有界面的情况下完成所有这些操作。


点赞。在我看来,这比搞一个内置对象的原型要好,尽管JS允许你这样做。 - Aaron Beall

0

你可以像这样:

interface Date
{
    Minimum(): Date;
}

(<any>Date.prototype).Minimum = function () { return (new Date()); }

let d = new Date();
console.log(d.Minimum());

希望这能有所帮助。

请注意,对于“any”的断言是不必要的。 - David Sherret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接