2014-09-02 82 views
5

我正在爲Parse Javascript SDK創建Typescript類型定義。它實際上是完整的。該定義適用於瀏覽和雲代碼,但不適用於Node。(TypeScript)爲Parse SDK(瀏覽器和節點)創建類型定義

使用解析與兩個客戶端和服務器端的javascript

瀏覽實施例:

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

節點示例:

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

Psuedue類型Definitio ñ

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

使用解析與新創建的定義

class GameScore extends Parse.Object {} 

var gameScore = new GameScore(); 

一切都將工作在瀏覽很好,因爲解析庫是全球可用。現在

節點一切都會正常工作,如果進口是這樣的:

var Parse = require("parse"); 

但進口實際上是這樣的:

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

所以「.Parse」在導入結束時將導致嘗試訪問Parse.Object時出現問題,因爲在上面的定義中沒有「.Parse」的訪問器。

所以我想要做的是有一個單一的定義文件,適用於瀏覽器和節點。我想過使用接口,但我不認爲這會允許我在需要時執行擴展或實現。

例如:

declare module Parse { 

    ... 

    interface Parse { 
     Object: Object; 
    } 
} 

declare module "parse" { 
     export = Parse; 
} 

這不會允許我對象,它只是定義爲解析接口的屬性。

任何幫助將是偉大的。謝謝。

+2

嗨伯爵,@basarat擊敗了我以下他的良好答案。 – Fenton 2014-09-03 08:21:56

+0

這方面的進展如何?這是否已經在GitHub的任何地方開源? – fatuhoku 2015-06-20 16:54:57

+0

我很好奇這個項目的狀態。 – damianesteban 2015-07-03 03:25:08

回答

6

這是一個有點麻煩:

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

用法:

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

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

說明

要引用您需要typeof模塊的類型。知道這一點,你可能想要做以下事情,但不能因爲明顯的原因(其中Parse是這個?...全球性的?或本地?):

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

因此,本地類型的詳細程度。別擔心,它們不會以任何方式膨脹生成的JavaScript。

+1

令人敬畏的夥計!而且比我想象的要清楚得多。相當酷很酷。謝啦!!!! – 2014-09-03 14:45:25

+0

我仍然得到HttpResponse未定義的錯誤 – 2015-11-05 12:41:57