2014-09-02 23 views
5

Tôi đang tạo định nghĩa kiểu Typecript cho Parse Javascript SDK. Nó thực sự hoàn chỉnh. Định nghĩa sẽ hoạt động cho Mã duyệt và mã đám mây nhưng không hoạt động trong nút.(TypeScript) Tạo định nghĩa kiểu cho Parse SDK (Trình duyệt và Nút)

Sử dụng Parse với cả hai phía client và phía máy chủ javascript

Duyệt Ví dụ:

var GameScore = Parse.Object.extend("GameScore"); 

Node Ví dụ:

var Parse = require('parse').Parse; 
var GameScore = Parse.Object.extend("GameScore"); 

Psuedue Loại Definitio n

declare module Parse { 

    interface FacebookUtils { 
     init(options?: any); 
    } 

    class Object { 
     constructor(attributes?: any, options?: any); 

    } 

    module Cloud { 

     interface FunctionResponse { 
      success?: (response: HttpResponse) => void; 
      error?: (response: HttpResponse) => void; 
     } 
    } 

} 

declare module "parse" { 
    export = Parse; 
} 

Sử dụng Parse với mới tạo nét

class GameScore extends Parse.Object {} 

var gameScore = new GameScore(); 

Tất cả mọi thứ sẽ làm việc tốt trong Duyệt vì thư viện Parse hiện có sẵn trên toàn cầu.

Bây giờ trong Node mọi thứ sẽ hoạt động tốt nếu việc nhập khẩu là như thế này:

var Parse = require("parse"); 

Nhưng việc nhập khẩu thực sự là như thế này:

var Parse = require("parse").Parse; 

Vì vậy, các ".Parse" ở cuối quá trình nhập sẽ gây ra sự cố khi cố gắng truy cập Parse.Object vì không có bộ truy cập cho ".Parse" trong định nghĩa ở trên.

Vì vậy, những gì tôi muốn làm là có một tệp định nghĩa duy nhất hoạt động cho cả Trình duyệt và Nút. Tôi nghĩ về việc sử dụng một giao diện nhưng tôi không nghĩ rằng điều đó sẽ cho phép tôi mở rộng hoặc thực hiện khi tôi muốn.

Ví dụ:

declare module Parse { 

    ... 

    interface Parse { 
     Object: Object; 
    } 
} 

declare module "parse" { 
     export = Parse; 
} 

này sẽ không cho phép tôi mở rộng Object, nó chỉ được định nghĩa là một tài sản trong giao diện Parse.

Mọi trợ giúp đều tuyệt vời. Cảm ơn.

+2

Xin chào Earl, @basarat đã đánh tôi với câu trả lời hay của anh ấy bên dưới. – Fenton

+0

Tiến trình này như thế nào? Điều này đã được mở nguồn trên GitHub bất cứ nơi nào? – fatuhoku

+0

Tôi cũng tò mò về trạng thái của dự án này. – damianesteban

Trả lời

6

Nó là một chút tham gia:

declare module Parse { 

    interface FacebookUtils { 
     init(options?: any); 
    } 

    class Object { 
     constructor(attributes?: any, options?: any); 

    } 

    module Cloud { 

     interface FunctionResponse { 
      success?: (response: HttpResponse) => void; 
      error?: (response: HttpResponse) => void; 
     } 
    } 

} 

declare module "parse" { 
    var captureType: typeof Parse; 
    var subType: { 
     Parse: typeof captureType; 
    } 
    export = subType; 
} 

Cách sử dụng:

///<reference path="parse.d.ts"/> 

import parse = require('parse'); 
var Parse = parse.Parse; 

Giải thích

Để tham khảo các loại của một module bạn cần typeof. Biết điều này, bạn có thể muốn làm như sau nhưng không thể cho lý do rõ ràng (mà Parse là này? ... toàn cầu?hoặc địa phương?):

var Parse: { Parse: typeof Parse } 
export = Parse; 

Do đó độ dài của các loại địa phương. Đừng lo lắng chúng không làm nổi bật JavaScript được tạo ra theo bất kỳ cách nào.

+1

Tuyệt vời dude !!!! Và rõ ràng hơn nhiều so với tôi nghĩ rằng nó sẽ. Khá darn mát mẻ. Cảm ơn người đàn ông !!!! –

+0

Tôi vẫn nhận được lỗi không xác định của HttpResponse –

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