diff --git a/test_typedcols.py b/test_typedcols.py
index 9e73062e5aeb2620027eaf96be6c3ec9edb3ea72..0f09924a187cde5db6d1a825059cb8239ab92de7 100755
--- a/test_typedcols.py
+++ b/test_typedcols.py
@@ -134,6 +134,16 @@ class TestTypedDict(unittest.TestCase):
             ("note", None)
         ])
 
+    def testSetDefaultNonexistent(self):
+        res = self.person.setdefault("tel", "1234")
+        self.assertEqual(res, 1234)
+        self.assertEqual(self.person["tel"], 1234)
+
+    def testSetDefaultExistent(self):
+        res = self.person.setdefault("age", "50")
+        self.assertEqual(res, 34)
+        self.assertEqual(self.person["age"], 34)
+
 
 class IntList(TypedList):
     item_type = int
diff --git a/typedcols.py b/typedcols.py
index 5c3468d3d994eb2807f3fd1f20c36ca2e54f13a2..328b27afaff7a336c802fde928c6781fd7b648dd 100644
--- a/typedcols.py
+++ b/typedcols.py
@@ -201,6 +201,15 @@ class TypedDict(MutableMapping):
         del self.data[key]
         self.initItemDefault(key)
 
+    def setdefault(self, key, default=None):
+        """ Return coerced value instead of original """
+        try:
+            return self[key]
+        except KeyError:
+            self[key] = default
+            return self[key]
+
+
     # Following definitions are not strictly necessary as MutableMapping
     # already defines them, however we can override them by calling to
     # possibly more optimized underlying implementations.