我正在为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界面中的属性。
任何帮助都会很棒。感谢。
答案 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。