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

Ear*_*son 5 javascript node.js parse-platform typescript

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

使用Parse同时使用客户端和服务器端javascript

浏览示例:

var GameScore = Parse.Object.extend("GameScore");
Run Code Online (Sandbox Code Playgroud)

节点示例:

var Parse = require('parse').Parse;
var GameScore = Parse.Object.extend("GameScore"); 
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

使用Parse与新创建定义

class GameScore extends Parse.Object {}

var gameScore = new GameScore();
Run Code Online (Sandbox Code Playgroud)

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

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

var Parse = require("parse"); 
Run Code Online (Sandbox Code Playgroud)

但导入实际上是这样的:

var Parse = require("parse").Parse;
Run Code Online (Sandbox Code Playgroud)

因此,导入结尾处的".Parse"会在尝试访问Parse.Object时导致问题,因为上面的定义中没有".Parse"的访问.

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

例如:

declare module Parse {

    ...

    interface Parse {
        Object: Object;
    }
}

declare module "parse" {
        export = Parse;
}
Run Code Online (Sandbox Code Playgroud)

这不允许我扩展Object,它只是被定义为Parse接口中的属性.

任何帮助都会很棒.谢谢.

bas*_*rat 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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

import parse = require('parse');
var Parse = parse.Parse;
Run Code Online (Sandbox Code Playgroud)

说明

要参考所需模块的类型typeof.知道了这一点,你可能想要做以下但不能出于明显的原因(这Parse是??全局的?还是本地的?):

var Parse: { Parse: typeof Parse }
export = Parse;
Run Code Online (Sandbox Code Playgroud)

因此本地类型的冗长.不要担心它们不会以任何方式膨胀生成的JavaScript.