func filterProps(props Properties, prop interface{}) Properties {
	newProps := Properties{}
	for _, p := range props {
		if reflect.TypeOf(p) != reflect.TypeOf(prop) {
			newProps = append(newProps, p)
		}
	}
	return newProps
}
filterProps returns all props except the type you pass.
package r
import (
	"reflect"
)
type (
	Element *fiber
	Component func(props Properties) Element
	Children []*fiber
	Properties []interface{}
	State []interface{}
)
func CreateElement(
	component Component,
	props Properties,
	children Children,
) *fiber {
	if !checkPropTypesAreUnique(props) {
		panic("props are not unique")
	}
	return &fiber{
		componentType: elementComponent,
		component:     component,
		Properties: append(
			props,
			children,
		),
	}
}
func CreateFragment(children Children) *fiber {
	return &fiber{
		componentType: fragmentComponent,
		component:     nil,
		Properties: Properties{
			children,
		},
	}
}
func CreateScreenElement(
	calculateLayout CalculateLayout,
	render RenderToScreen,
	props Properties,
	children Children,
) *fiber {
	return &fiber{
		componentType:   screenComponent,
		calculateLayout: &calculateLayout,
		renderToScreen:  &render,
		Properties: append(
			props,
			children,
		),
		component: nil,
	}
}
func checkPropTypesAreUnique(props Properties) bool {
	seenPropTypes := make(map[reflect.Type]bool)
	for _, p := range props {
		if seen := seenPropTypes[reflect.TypeOf(p)]; seen {
			return false
		}
		seenPropTypes[reflect.TypeOf(p)] = true
	}
	return true
}
func (props Properties) GetProperty(
	propType interface{},
	errorMessage string,
) interface{} {
	for _, p := range props {
		if reflect.TypeOf(p) == reflect.TypeOf(propType) {
			return p
		}
	}
	panic(errorMessage)
}
func (props Properties) GetOptionalProperty(
	propType interface{},
) interface{} {
	for _, p := range props {
		if reflect.TypeOf(p) == reflect.TypeOf(propType) {
			return p
		}
	}
	return propType
}