diff --git a/questions/10-medium-tuple-to-union/README.md b/questions/10-medium-tuple-to-union/README.md
new file mode 100644
index 00000000..f02ef5fd
--- /dev/null
+++ b/questions/10-medium-tuple-to-union/README.md
@@ -0,0 +1,13 @@
+
Deep Readonly

by Anthony Fu @antfu
+
+Implement a generic `TupleToUnion` which covers the values of a tuple to its values union.
+
+For example
+
+```ts
+type Arr = ['1', '2', '3']
+
+const a: TupleToUnion // expected to be '1' | '2' | '3'
+```
+
+
\ No newline at end of file
diff --git a/questions/10-medium-tuple-to-union/info.yml b/questions/10-medium-tuple-to-union/info.yml
new file mode 100644
index 00000000..5c971a3e
--- /dev/null
+++ b/questions/10-medium-tuple-to-union/info.yml
@@ -0,0 +1,8 @@
+title: Tuple to Union
+
+author:
+ name: Anthony Fu
+ email: hi@antfu.me
+ github: antfu
+
+tags: infer, tuple, union
\ No newline at end of file
diff --git a/questions/10-medium-tuple-to-union/info.zh-CN.yml b/questions/10-medium-tuple-to-union/info.zh-CN.yml
new file mode 100644
index 00000000..fd41643c
--- /dev/null
+++ b/questions/10-medium-tuple-to-union/info.zh-CN.yml
@@ -0,0 +1 @@
+title: 元组转合集
\ No newline at end of file
diff --git a/questions/10-medium-tuple-to-union/template.ts b/questions/10-medium-tuple-to-union/template.ts
new file mode 100644
index 00000000..840acde1
--- /dev/null
+++ b/questions/10-medium-tuple-to-union/template.ts
@@ -0,0 +1 @@
+type TupleToUnion = any
diff --git a/questions/10-medium-tuple-to-union/test-cases.ts b/questions/10-medium-tuple-to-union/test-cases.ts
new file mode 100644
index 00000000..8089dfd9
--- /dev/null
+++ b/questions/10-medium-tuple-to-union/test-cases.ts
@@ -0,0 +1,6 @@
+import { Equal, Expect } from '@type-challenges/utils'
+
+type cases = [
+ Expect, 123 | '456' | true>>,
+ Expect, 123>>,
+]