javascript - (TypeScript) Típusdefiníció létrehozása a Parse SDK-hoz (Böngésző és Node)
Typescript típusdefiníciót készítek a Parse Javascript SDK-hoz. Valójában teljes. A definíció működne a Browse és a Cloud Code esetén, de Node-ban nem.
Parse használata mind kliens oldali, mind szerver oldali JavaScript-tel
Példa böngészése:
var GameScore = Parse.Object.extend("GameScore");
Csomópont példa:
var Parse = require('parse').Parse;
var GameScore = Parse.Object.extend("GameScore");
Pseudotípus definíció
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 használata újonnan létrehozott definícióval
class GameScore extends Parse.Object {}
var gameScore = new GameScore();
Minden rendben működne a Browse részben, mert a Parse könyvtár globálisan elérhető.
Most a Node-ban minden jól működne, ha az import így lenne:
var Parse = require("parse");
De az import valójában így néz ki:
var Parse = require("parse").Parse;
Tehát a ".Parse" az import végén problémát okozna, amikor megpróbálnánk hozzáférni a Parse.Object-hez, mert a fenti definícióban nincs elérési út a ".Parse"-hoz.
Szóval amit csinálni akarok, az az, hogy legyen egyetlen definíciós fájlom, ami mind a Böngésző, mind a Node számára működik. Gondolkodtam azon, hogy használjak egy interfészt, de nem hiszem, hogy az lehetővé tenné számomra az extends vagy implements használatát, amikor akarom.
Például:
declare module Parse {
...
interface Parse {
Object: Object;
}
}
declare module "parse" {
export = Parse;
}
Ez nem engedné, hogy kiterjesszem az Object-et, csak egy tulajdonságként van definiálva a Parse felületen.
Bármilyen segítség nagyszerű lenne. Köszönöm.
Válasz #1
Ez kicsit bonyolult :
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;
}
Használat :
///<reference path="parse.d.ts"/>
import parse = require('parse');
var Parse = parse.Parse;
Magyarázat
Ahhoz, hogy hivatkozz a modul típusára, a typeof-ra van szükséged. Ezt tudva, a következőt szeretnéd megtenni, de nyilvánvaló okokból nem tudod (melyik Parse ez? ... a globális? vagy a helyi?):
var Parse: { Parse: typeof Parse }
export = Parse;
Ezért a helyi típusok szóbelisége. Ne aggódj, semmilyen módon nem növelik a generált JavaScript méretét.
