Add from function to initialize a model and assign properties values using any object, silently ignoring fields which are not properties.
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				/ test (push) Successful in 51s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	/ test (push) Successful in 51s
				
			This commit is contained in:
		
							parent
							
								
									fbd2763ea6
								
							
						
					
					
						commit
						7707789bbf
					
				
					 3 changed files with 45 additions and 0 deletions
				
			
		
							
								
								
									
										12
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
										
									
									
									
								
							|  | @ -286,6 +286,18 @@ const alteredModelInstance = definedModel.model(modelInstance).assign({ | |||
| }); | ||||
| ``` | ||||
| 
 | ||||
| #### `from(object)` | ||||
| 
 | ||||
| Initialize a model instance and assign the provided fields to its properties. Fields which are not properties of the target model are silently ignored. | ||||
| 
 | ||||
| ```typescript | ||||
| const newModelInstance = definedModel.from({ | ||||
| 	anyProperty: "foo", | ||||
| 	anotherOne: true, | ||||
| 	not_a_property: "will be ignored", | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| #### `serialize()` | ||||
| 
 | ||||
| Serialize the model. | ||||
|  |  | |||
|  | @ -460,6 +460,16 @@ export class ModelManager<T extends object, Shape extends ModelShape<T>, Identif | |||
| 			return (new Model<T, Shape, Identifier>(this)).initInstance(); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Initialize a new model instance with the provided object properties values. | ||||
| 	 * Fields that cannot be matched to existing properties are silently ignored. | ||||
| 	 * @param fields | ||||
| 	 */ | ||||
| 	from(fields: Partial<ModelPropertiesValues<T, Shape>> & {[field: string]: any}): ModelInstance<T, Shape, Identifier> | ||||
| 	{ | ||||
| 		return this.model().assign(fields); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Parse the serialized model object to a new model instance. | ||||
| 	 * @param serialized The serialized model object. | ||||
|  |  | |||
|  | @ -356,4 +356,27 @@ describe("model", () => { | |||
| 			text: "fully new text! yes!", | ||||
| 		}); | ||||
| 	}); | ||||
| 
 | ||||
| 	it("initializes a model from properties values", () => { | ||||
| 		const testArticle = Article.model.from({ | ||||
| 			title: "this is a test", | ||||
| 			authors: [ | ||||
| 				Account.model.from({ name: "John Doe", email: "test@test.test", createdAt: new Date(), active: true }), | ||||
| 			], | ||||
| 			text: "this is a long text", | ||||
| 			evaluation: 8.52, | ||||
| 			tags: [{ name: "test" }, { name: "foo" }], | ||||
| 
 | ||||
| 			unknownField: true, | ||||
| 			anotherOne: "test", | ||||
| 		}); | ||||
| 
 | ||||
| 		expect(testArticle.title).toBe("this is a test"); | ||||
| 		expect(testArticle.text).toBe("this is a long text"); | ||||
| 		expect(testArticle.evaluation).toBe(8.52); | ||||
| 		expect(testArticle.authors).toHaveLength(1); | ||||
| 		expect(testArticle.authors[0]?.name).toBe("John Doe"); | ||||
| 		expect((testArticle as any).unknownField).toBeUndefined(); | ||||
| 		expect((testArticle as any).anotherOne).toBeUndefined(); | ||||
| 	}); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue