Search code examples
typescriptextension-methods

How to create an extension method in TypeScript for 'Date' data type


I have tried to create an extension method in TypeScript based on this discussion (https://github.com/Microsoft/TypeScript/issues/9), but I couldn't create a working one.

Here is my code,

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

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

    export class MyClass {}
}

but its not working.


Solution

  • You need to change the prototype:

    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);
    

    Though it looks like you want to have a static factory method on the Date object, in which case you better do something like:

    interface DateConstructor {
        ConvertToDateFromTS(msg: string): Date;
    }
    
    Date.ConvertToDateFromTS = function(msg: string): Date {
        // implement logic
    }
    
    let newDate = Date.ConvertToDateFromTS(TS_VALUE);