diff --git a/bool.go b/bool.go
index 60beb54..010576c 100644
--- a/bool.go
+++ b/bool.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (b *boolValue) Type() string {
+	return "bool"
+}
+
 func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) }
 
 // BoolVar defines a bool flag with specified name, default value, and usage string.
diff --git a/duration.go b/duration.go
index db8bfd5..66ed7ac 100644
--- a/duration.go
+++ b/duration.go
@@ -16,6 +16,10 @@
 	return err
 }
 
+func (d *durationValue) Type() string {
+	return "duration"
+}
+
 func (d *durationValue) String() string { return (*time.Duration)(d).String() }
 
 // DurationVar defines a time.Duration flag with specified name, default value, and usage string.
diff --git a/flag.go b/flag.go
index dfc03d2..47761a0 100644
--- a/flag.go
+++ b/flag.go
@@ -154,6 +154,7 @@
 type Value interface {
 	String() string
 	Set(string) error
+	Type() string
 }
 
 // sortFlags returns the flags as a slice in lexicographical sorted order.
diff --git a/float32.go b/float32.go
index a0041e2..b7ad67d 100644
--- a/float32.go
+++ b/float32.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (f *float32Value) Type() string {
+	return "float32"
+}
+
 func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) }
 
 // Float32Var defines a float32 flag with specified name, default value, and usage string.
diff --git a/float64.go b/float64.go
index 8d79be0..0315512 100644
--- a/float64.go
+++ b/float64.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (f *float64Value) Type() string {
+	return "float64"
+}
+
 func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) }
 
 // Float64Var defines a float64 flag with specified name, default value, and usage string.
diff --git a/int.go b/int.go
index cb85e14..dca9da6 100644
--- a/int.go
+++ b/int.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *intValue) Type() string {
+	return "int"
+}
+
 func (i *intValue) String() string { return fmt.Sprintf("%v", *i) }
 
 // IntVar defines an int flag with specified name, default value, and usage string.
diff --git a/int32.go b/int32.go
index 2e1a317..18eaacd 100644
--- a/int32.go
+++ b/int32.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *int32Value) Type() string {
+	return "int32"
+}
+
 func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) }
 
 // Int32Var defines an int32 flag with specified name, default value, and usage string.
diff --git a/int64.go b/int64.go
index 43aeced..0114aaa 100644
--- a/int64.go
+++ b/int64.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *int64Value) Type() string {
+	return "int64"
+}
+
 func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) }
 
 // Int64Var defines an int64 flag with specified name, default value, and usage string.
diff --git a/int8.go b/int8.go
index 539c4eb..aab1022 100644
--- a/int8.go
+++ b/int8.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *int8Value) Type() string {
+	return "int8"
+}
+
 func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) }
 
 // Int8Var defines an int8 flag with specified name, default value, and usage string.
diff --git a/ip.go b/ip.go
index 3a411fc..9d53bd3 100644
--- a/ip.go
+++ b/ip.go
@@ -26,6 +26,10 @@
 	return net.IP(*i)
 }
 
+func (i *ipValue) Type() string {
+	return "ip"
+}
+
 // IPVar defines an net.IP flag with specified name, default value, and usage string.
 // The argument p points to an net.IP variable in which to store the value of the flag.
 func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {
diff --git a/ipmask.go b/ipmask.go
index b8a164a..6f85be9 100644
--- a/ipmask.go
+++ b/ipmask.go
@@ -26,6 +26,10 @@
 	return net.IPMask(*i)
 }
 
+func (i *ipMaskValue) Type() string {
+	return "ipMask"
+}
+
 // Parse IPv4 netmask written in IP form (e.g. 255.255.255.0).
 // This function should really belong to the net package.
 func ParseIPv4Mask(s string) net.IPMask {
diff --git a/string.go b/string.go
index 65c0cb7..362fbf8 100644
--- a/string.go
+++ b/string.go
@@ -14,6 +14,9 @@
 	*s = stringValue(val)
 	return nil
 }
+func (s *stringValue) Type() string {
+	return "string"
+}
 
 func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) }
 
diff --git a/uint.go b/uint.go
index 40b9ebb..c063fe7 100644
--- a/uint.go
+++ b/uint.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *uintValue) Type() string {
+	return "uint"
+}
+
 func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) }
 
 // UintVar defines a uint flag with specified name, default value, and usage string.
diff --git a/uint16.go b/uint16.go
index 182dc40..ec14ab0 100644
--- a/uint16.go
+++ b/uint16.go
@@ -18,10 +18,15 @@
 	*i = uint16Value(v)
 	return err
 }
+
 func (i *uint16Value) Get() interface{} {
 	return uint16(*i)
 }
 
+func (i *uint16Value) Type() string {
+	return "uint16"
+}
+
 // Uint16Var defines a uint flag with specified name, default value, and usage string.
 // The argument p points to a uint variable in which to store the value of the flag.
 func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {
diff --git a/uint32.go b/uint32.go
index 165c8b2..05bc3bd 100644
--- a/uint32.go
+++ b/uint32.go
@@ -22,6 +22,10 @@
 	return uint32(*i)
 }
 
+func (i *uint32Value) Type() string {
+	return "uint32"
+}
+
 // Uint32Var defines a uint32 flag with specified name, default value, and usage string.
 // The argument p points to a uint32 variable in which to store the value of the flag.
 func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {
diff --git a/uint64.go b/uint64.go
index f41c5a2..99c7e80 100644
--- a/uint64.go
+++ b/uint64.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *uint64Value) Type() string {
+	return "uint64"
+}
+
 func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) }
 
 // Uint64Var defines a uint64 flag with specified name, default value, and usage string.
diff --git a/uint8.go b/uint8.go
index 174f99c..6fef508 100644
--- a/uint8.go
+++ b/uint8.go
@@ -19,6 +19,10 @@
 	return err
 }
 
+func (i *uint8Value) Type() string {
+	return "uint8"
+}
+
 func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) }
 
 // Uint8Var defines a uint8 flag with specified name, default value, and usage string.
