JSFiddle - React, Tailwind, and code Playground

by Rolf

JavaScript

const parameter = (function() {
	// Vorbereitete Readonly-Propertydeskriptoren für status: true und status:false
	const trueStatus = { configurable:false, writable:false, value: true };
	const falseStatus = { configurable:false, writable:false, value: false };
  
  // Helper - erzeuge einen unveränderlichen Success- oder Fail-Prototypen für ein Prüfergebnis
	function createResultPrototype(checkType, statusProperty, message) {
		 const prototype = Object.create(null, {
	   			status: statusProperty,
      		type: { writable: false, configurable: false, value: checkType },
	    		message: { configurable: false,
	    					     get: function() { return this.name + ' ' + message; } }
	   		});
     return Object.freeze(prototype);
	}
  // Funktions-Factory für einen bestimmten Test. Erzeugt die Prototypen für
  // die Ergebnisobjekte und die Methode zur Testdurchführung.
  function makeCheck(type, test, successMessage, failMessage) {
    const success = createResultPrototype(type, trueStatus, successMessage),
          fail    = createResultPrototype(type, falseStatus, failMessage);
          
  	return function(name, value) {
	    result = Object.create(test(value) ? success : fail);
  	  result.name = name;
	    return result;
    }
  }
  // Erzeuge ein Objekt mit den gewünschten Check-Methoden
  const parameter = {
    isTypeString : makeCheck('typeString', val => typeof val === 'string',
                             'is a string', 'must be a string'),
    isTypeArray  : makeCheck('typeArray', val => Array.isArray(val),
          								   'is an Array', 'must be an Array'),
		isTypeInteger: makeCheck('typeInteger', val => Number.isInteger(val),
          									 'is an integer', 'must be an integer'),
		isTypeNumber : makeCheck('typeNumber', val => Number.isFinite(val),
          			 					   'is a number', 'must be a number')
  };
  // Mit freeze dafür sorgen dass keiner am Helper herumspielt.
  return Object.freeze(parameter);
})();

let checks =...