J'écris un unmarshaller générique. Il convertit les données de base de données de graphe en classes de modèle TypeScript (1.8.7) générées. L'entrée est JSON. La sortie doit être une instance d'une classe de modèle.
Mon but ultime est de créer quelque chose comme Hibernate OGM, uniquement pour les trames Tinkerpop et TypeScript, avec le point de terminaison REST au milieu.TypeScript - Passer une classe comme argument et réflexion
Quelle est la bonne façon de passer une classe en tant que paramètre et d'atteindre ses membres statiques? Je veux avoir quelque chose comme ceci:
SomeModel some = <SomeModel> unmarshaller.fromJSON({/*Object from JSON*/}, SomeModel);
J'ai essayé d'écrire une méthode. Je ne sais pas si je me dirige dans la bonne direction, n'hésitez pas à suggérer différentes approches. Mais quand j'ai essayé d'exécuter ceci sur Plunker, j'ai eu des erreurs d'exécution avec stacktrace inutilement.
Le modèle superclasse ressemble à ceci:
/**
* Things common to all Frames models on the Typescript side.
*/
export class FrameModel
{
// Model metadata
static discriminator: string;
static graphPropertyMapping: { [key:string]:string; };
static graphRelationMapping: { [key:string]:string; };
// Each instance needs a vertex ID
private vertexId: number;
public getVertexId(): number {
return this.vertexId;
}
}
classe modèle Exemple:
import {TestPlanetModel} from './TestPlanetModel';
import {TestShipModel} from './TestShipModel';
export class TestGeneratorModel extends FrameModel
{
static discriminator: string = 'TestGenerator';
static graphPropertyMapping: { [key:string]:string; } = {
bar: 'boo',
name: 'name',
rank: 'rank',
};
static graphRelationMapping: { [key:string]:string; } = {
colonizes: 'colonizedPlanet',
commands: 'ship',
};
boo: string;
name: string;
rank: string;
public colonizedPlanet: TestPlanetModel[]; // edge label 'colonizedPlanet'
public ship: TestShipModel; // edge label 'ship'
}
Je n'ai pas trouvé beaucoup de matériel sur la réflexion et la gestion de classe dactylographiée.
Je sais comment je ferais cela en Java.
Je sais comment je ferais cela en JavaScript.
Je comprends que je pourrais obtenir des résultats similaires avec les décorateurs, mais avoir des champs ou des champs statiques semblait un peu plus simple, pour les modèles générés.
Son classique d'appeler 'class'' klass' :) – basarat