(TypeScript)为Parse SDK(浏览器和节点)创建类型定义

时间:2014-09-02 23:58:53

标签: javascript node.js parse-platform typescript

我正在为Parse Javascript SDK创建一个Typescript类型定义。它实际上已经完成了。该定义适用于Browse和Cloud Code,但不适用于Node。

在客户端和服务器端使用Parse javascript

浏览示例:

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

节点示例:

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

Psuedue类型定义

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

在新创建定义中使用Parse

class GameScore extends Parse.Object {}

var gameScore = new GameScore();

一切都可以在浏览中正常工作,因为Parse库是全局可用的。

现在在 Node 中,如果导入是这样的话,一切都会正常工作:

var Parse = require("parse"); 

但导入实际上是这样的:

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

因此,在导入结束时“。解析”会在尝试访问 Parse.Object 时导致问题,因为没有“.Parse”的访问者在上面的定义中。

所以我想要做的是有一个适用于浏览器和节点的单一定义文件。我想过使用一个接口,但我认为这不会允许我在我想要的时候做扩展或实现。

例如:

declare module Parse {

    ...

    interface Parse {
        Object: Object;
    }
}

declare module "parse" {
        export = Parse;
}

这不允许我扩展 Object ,它只是被定义为Parse界面中的属性。

任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分: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。