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

(TypeScript) Creating type definition for Parse SDK (Browser and Node)

本文关键字:节点 类型 定义 浏览器 创建 Parse TypeScript SDK      更新时间:2023-09-26

我正在为Parse Javascript SDK创建一个Typescript类型定义。它实际上是完整的。该定义适用于"浏览"answers"云代码",但不适用于"节点"。

同时使用客户端和服务器端的解析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();

Browse中一切都会很好,因为Parse库是全局可用的。

现在,在Node中,如果导入如下,一切都会正常工作:

var Parse = require("parse"); 

但进口实际上是这样的:

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

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

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

例如:

declare module Parse {
    ...
    interface Parse {
        Object: Object;
    }
}
declare module "parse" {
        export = Parse;
}

这不允许我扩展Object,它只是在Parse接口中定义为一个属性。

任何帮助都会很棒。谢谢

这有点涉及:

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。