2016-03-19 4 views
0

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

ответ

1

Вы можете иметь это так:

interface Date 
{ 
    Minimum(): Date; 
} 

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

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

Надеется, что это помогает.

+0

Обратите внимание, что утверждение 'any' необязательно. –

2

Интерфейсы не передаются в JS, они просто предназначены для определения типов.

Вы можете создать новый интерфейс, который унаследует от первого:

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

Но для реальных реализаций вам нужно будет определить класс. Например:

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

Однако обратите внимание, что вы можете сделать все это без интерфейса.

+0

Упрощенный. На мой взгляд, это лучше, чем возиться с прототипом объекта buit-in, хотя JS позволяет вам это делать. – Aaron

Смежные вопросы