2016-07-18 16 views
7

Tôi đã cố tạo phương pháp mở rộng trong TypeScript dựa trên thảo luận này (https://github.com/Microsoft/TypeScript/issues/9), nhưng tôi không thể tạo một phương thức làm việc.Cách tạo phương thức mở rộng trong TypeScript cho loại dữ liệu 'Ngày'

Đây là mã của tôi,

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

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

    export class MyClass {} 
} 

nhưng nó không làm việc.

Trả lời

12

Bạn cần phải thay đổi nguyên mẫu:

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

Mặc dù có vẻ như bạn muốn có một phương thức tĩnh trên đối tượng Date, trong trường hợp này bạn tốt hơn làm một cái gì đó như:

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

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

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

ném lỗi, 1. tài sản ConvertToDateFromTS không tồn tại trên loại DateConstructor 2.property ConvertToDateFromTS không tồn tại trên loại Ngày – AhammadaliPK

+0

Bạn nhận được những lỗi này ở đâu? Nó hoạt động cho tôi: [code in playground] (https://www.typescriptlang.org/play/#src=interface%20DateConstructor%20%7B%0D%0A%20%20%20%20ConvertToDateFromTS (msg% 3A% 20 chuỗi)% 3A% 20Date% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0ADate.ConvertToDateFromTS% 20% 3D% 20 chức năng (msg% 3A% 20string)% 3A% 20Date% 20% 7B% 0D% 0A% 09return% 20null% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0 Giao diện% 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% 20 chức năng (msg% 3A% 20string)% 3A% 20Date% 20% 7B% 0D% 0A% 20% 20% 20% 20return% 20null% 3B% 0D% 0A% 7D) –

+1

Bạn chưa thêm bất kỳ điều gì vào câu hỏi của bạn để trả lời những gì tôi đã hỏi bạn. Tôi đã cho bạn một câu trả lời để làm thế nào để làm những gì bạn muốn, bạn nói rằng có lỗi và tôi hỏi nơi nào bạn có được những người? và thậm chí còn cung cấp liên kết đến cùng một mã trong sân chơi, điều này cho thấy rõ ràng mã biên dịch không có lỗi. –

Các vấn đề liên quan