code: function throwTypeErrorIfNotOfType (prefix, paramName, value, type, suffix) {
          var classOfValue = classOf(value);
  
          // If `type` itself is not of the allowed types throw an error
          if (!isString(type) && !isFunction(type)) {
              throw new TypeError('`sjl.throwTypeErrorIfNotOfType` only accepts strings or constructors.  ' +
                  'Type received: `' + classOf(type) + '`.');
          }
  
          // Proceed with type check
          if (!classOfIs(value, type)) {
              throw new TypeError('#`' + prefix + '`.`' + paramName
                  + '` is not of type "' + type + '".  ' + (suffix || '')
                  + '  Type received: `' + classOfValue + '`.');
          }
      }
docs: Throws a type error if value is not of type and prepends the prefix and
  paramName/variable-name to the message (removes type checking boilerplate where required).
  @function module:sjl.throwTypeErrorIfNotOfType
  @param prefix {String} - Context name and function name to prefix to error message if it is thrown.
  @param paramName {String} - Param name of the value being passed in.
  @param value {*} - Value to inspect.
  @param type {String|Function} - Expected type constructor or constructor name.
  @param [suffix] {String|*} - A hint to user or a way to fix the error;  Message to suffix to error message.  Optional.
  @throws {TypeError}
  @returns {void}