extendsWith ({ signature, fromStructure, toStructure, isTypeInstance }) {
    return new TypeTransformer({
      signature: signature || this.signature,
      fromStructure: fromStructure || this.fromStructure,
      toStructure: toStructure || this.toStructure,
      isTypeInstance: isTypeInstance || this.isTypeInstance
    })
  }
@param {Object} param
@param {number} [param.signature] The signature of the structure
@param {isTypeInstanceFunction} [param.isTypeInstance] The function which checks if object is
               instance of the type described by the TypeTransformer
@param {toStructureFunction} [param.toStructure] The function which gets the object and converts to structure
@param {fromStructureFunction} pparam.fromStructure] The function which get the structure and covnverts to object
@returns {TypeTransformer} A new type transform extends with new methods