code: func TypeOf(x interface{}) Type {
  	switch x := x.(type) {
  	case nil:
  		return NewNull()
  	case bool:
  		return B
  	case string:
  		return S
  	case json.Number:
  		return N
  	case map[interface{}]interface{}:
  		static := make([]*StaticProperty, 0, len(x))
  		for k, v := range x {
  			static = append(static, NewStaticProperty(k, TypeOf(v)))
  		}
  		return NewObject(static, nil)
  	case []interface{}:
  		static := make([]Type, len(x))
  		for i := range x {
  			static[i] = TypeOf(x[i])
  		}
  		return NewArray(static, nil)
  	}
  	panic("unreachable")
  }
docs: // TypeOf returns the type of the Golang native value.