2016-07-18 2 views
7

Я попытался создать метод расширения в TypeScript на основе этого обсуждения (https://github.com/Microsoft/TypeScript/issues/9), но я не смог создать рабочий.Как создать метод расширения в TypeScript для типа данных «Дата»

Вот мой код,

namespace Mynamespace { 
    interface Date { 
     ConvertToDateFromTS(msg: string): Date; 
    } 

    Date.ConvertToDateFromTS(msg: string): Date { 
     //conversion code here 
    } 

    export class MyClass {} 
} 

но не работает.

ответ

12

Вы должны изменить прототип:

interface Date { 
    ConvertToDateFromTS(msg: string): Date; 
} 

Date.prototype.ConvertToDateFromTS = function(msg: string): Date { 
    // implement logic 
} 

let oldDate = new Date(); 
let newDate = oldDate.ConvertToDateFromTS(TS_VALUE); 

Хотя это выглядит, как вы хотите, чтобы иметь статический фабричный метод на Date объекта, в этом случае вам лучше сделать что-то вроде:

interface DateConstructor { 
    ConvertToDateFromTS(msg: string): Date; 
} 

Date.ConvertToDateFromTS = function(msg: string): Date { 
    // implement logic 
} 

let newDate = Date.ConvertToDateFromTS(TS_VALUE); 
+2

throwing error, 1. Свойство ConvertToDateFromTS не существует в типе DateConstructor 2.property ConvertToDateFromTS не существует по типу Date – AhammadaliPK

+0

Где вы получаете эти ошибки? Это работает для меня: [код на детской площадке] (https://www.typescriptlang.org/play/#src=interface%20DateConstructor%20%7B%0D%0A%20%20%20%20ConvertToDateFromTS (msg% 3A% 20string)% 3A% 20Date% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0ADate.ConvertToDateFromTS% 20% 3D% 20function (тзд% 3A% 20string)% 3A% 20Date% 20% 7B% 0D% 0A% 09return% 20null% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0Ainterface% 20Date% 20% 7B% 0D% 0A% 20% 20% 20% 20ConvertToDateFromTS (MSG% 3A% 20string)% 3A% 20Date% 3B % 0D% 0A% 7D% 0D% 0A% 0D% 0ADate.prototype.ConvertToDateFromTS% 20% 3D% 20function (тзд% 3A% 20string)% 3A% 20Date% 20% 7B% 0D% 0A% 20% 20% 20% 20return% 20null% 3B% 0D% 0A% 7D) –

+1

Вы ничего не добавили к своему вопросу, который отвечает на то, что я вас просил. Я дал вам ответ, как делать то, что вы хотите, вы сказали, что есть ошибки, и я спросил, где вы их получите? и даже предоставил ссылку на тот же код на игровой площадке, что ясно показывает, что код компилируется без ошибок. –

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