【问题标题】:(TypeScript) Creating type definition for Parse SDK (Browser and Node)(TypeScript) 为 Parse SDK(浏览器和节点)创建类型定义
【发布时间】:2023-03-16 19:28:01
【问题描述】:

我正在为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"); 

伪类型定义

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" 会在尝试访问 Parse.Object 时导致问题,因为“.Parse”没有访问器在上面的定义中。

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

例如:

declare module Parse {

    ...

    interface Parse {
        Object: Object;
    }
}

declare module "parse" {
        export = Parse;
}

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

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

【问题讨论】:

  • 嗨,Earl,@basarat 在下面给出了他的好答案,击败了我。
  • 这方面的进展如何?这是在 GitHub 上的任何地方开源的吗?
  • 我也很好奇这个项目的状态。
  • @damianesteban 你们有没有搜索过 tsd,因为它在上面。只需搜索“解析”即可。
  • @fatuhoku search tsd.

标签: javascript node.js parse-platform typescript


【解决方案1】:

这有点牵扯:

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 膨胀。

【讨论】:

  • 太棒了!!!!而且比我想象的要清晰得多。真是太酷了。谢谢大佬!!!
猜你喜欢
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 2017-04-06
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多