export class TreeNode<T>{
data?: T
children?: Map<string, TreeNode<Partial<T>>> | null
}
// type Inside<P, T> = T extends P ? P : undefined;
export class StateTree<K> implements TreeNode<K>{
data:K = {} as K;
children:Map<string, StateTree<Partial<K>>> = new Map();
constructor(){}
protected addNode<ModelType>(stateName:string, stateData:ModelType){
const newState = new StateTree<ModelType>();
newState.data = stateData;
this.children.set(stateName, newState);
}
public findChild(childStateName:string){
return this.children.get(childStateName);
}
public getChild(childStateName:string){
return this.children.get(childStateName)!;
}
public setState(data:K | Partial<K>){
this.data = {...this.data, ...data};
}
public setNode(name:string, state:Partial<K>){
this.addNode<Partial<K>>(name, state);
}
}
This project was generated with Angular CLI version 11.0.5.
Run ng serve
for a dev server. Navigate to http://localhost:4200/
. The app will automatically reload if you change any of the source files.
Run ng generate component component-name
to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module
.
Run ng build
to build the project. The build artifacts will be stored in the dist/
directory. Use the --prod
flag for a production build.
Run ng test
to execute the unit tests via Karma.
Run ng e2e
to execute the end-to-end tests via Protractor.
To get more help on the Angular CLI use ng help
or go check out the Angular CLI Overview and Command Reference page.