diff --git a/Language/Types/Type_Aliases/built-in_types_t01.dart b/Language/Types/Type_Aliases/built-in_types_t01.dart
new file mode 100644
index 0000000..8f1d94a
--- /dev/null
+++ b/Language/Types/Type_Aliases/built-in_types_t01.dart
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion Test for type aliases for built-in types
+ * @description Checks initialization of type aliases for built-in types via
+ * literals
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+import '../../../Utils/expect.dart';
+
+typedef IntAlias = int;
+typedef NumAlias = num;
+typedef DoubleAlias = double;
+typedef BoolAlias = bool;
+typedef StringAlias = String;
+
+main() {
+  IntAlias i = 1;
+  NumAlias n = 3.14;
+  DoubleAlias d = 3.1415;
+  BoolAlias b = true;
+  StringAlias s = "Lily was here";
+
+  Expect.equals(1, i);
+  Expect.equals(3.14, n);
+  Expect.equals(3.1415, d);
+  Expect.isTrue(b);
+  Expect.equals("Lily was here", s);
+
+  i = 3;
+  n = 1;
+  d = 4;
+  b = false;
+  s = "Run, Forrest, Run!";
+
+  Expect.equals(3, i);
+  Expect.equals(1.14, n);
+  Expect.equals(4, d);
+  Expect.isFalse(b);
+  Expect.equals("Run, Forrest, Run!", s);
+}
diff --git a/Language/Types/Type_Aliases/built-in_types_t02.dart b/Language/Types/Type_Aliases/built-in_types_t02.dart
new file mode 100644
index 0000000..5d78ba4
--- /dev/null
+++ b/Language/Types/Type_Aliases/built-in_types_t02.dart
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion Test for type aliases for built-in types
+ * @description Checks use of type aliases for built-in types as function
+ * arguments
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+
+typedef IntAlias = int;
+typedef NumAlias = num;
+typedef DoubleAlias = double;
+typedef BoolAlias = bool;
+typedef StringAlias = String;
+
+void fooInt(int arg) {}
+void fooNum(num arg) {}
+void fooDouble(double arg) {}
+void fooBool(bool arg) {}
+void fooString(String arg) {}
+
+main() {
+  IntAlias i = 1;
+  NumAlias n = 3.14;
+  DoubleAlias d = 3.1415;
+  BoolAlias b = true;
+  StringAlias s = "Lily was here";
+
+  fooInt(i);
+  fooNum(n);
+  fooDouble(d);
+  fooBool(b);
+  fooString(s);
+}
diff --git a/Language/Types/Type_Aliases/built-in_types_t03.dart b/Language/Types/Type_Aliases/built-in_types_t03.dart
new file mode 100644
index 0000000..a37c586
--- /dev/null
+++ b/Language/Types/Type_Aliases/built-in_types_t03.dart
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion Test for type aliases for built-in types
+ * @description Checks use of type aliases for built-in types as return values
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+import '../../../Utils/expect.dart';
+
+typedef IntAlias = int;
+typedef NumAlias = num;
+typedef DoubleAlias = double;
+typedef BoolAlias = bool;
+typedef StringAlias = String;
+
+int fooInt(IntAlias i) => i;
+num fooNum(NumAlias n) => n;
+double fooDouble(DoubleAlias d) => d;
+bool fooBool(BoolAlias b) => b;
+String fooString(StringAlias s) => s;
+
+main() {
+  IntAlias i = 1;
+  NumAlias n = 3.14;
+  DoubleAlias d = 3.1415;
+  BoolAlias b = true;
+  StringAlias s = "Lily was here";
+
+  Expect.equals(1, fooInt(i));
+  Expect.equals(3.14, fooNum(n));
+  Expect.equals(3.1415, fooDouble(d));
+  Expect.isTrue(fooBool(b));
+  Expect.equals("Lily was here", fooString(s));
+
+  i = 3;
+  n = 1;
+  d = 4;
+  b = false;
+  s = "Run, Forrest, Run!";
+
+  Expect.equals(3, fooInt(i));
+  Expect.equals(1, fooNum(n));
+  Expect.equals(4, fooDouble(d));
+  Expect.isFalse(fooBool(b));
+  Expect.equals("Run, Forrest, Run!", fooString(s));
+}
diff --git a/Language/Types/Type_Aliases/built-in_types_t04.dart b/Language/Types/Type_Aliases/built-in_types_t04.dart
new file mode 100644
index 0000000..753469f
--- /dev/null
+++ b/Language/Types/Type_Aliases/built-in_types_t04.dart
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion Test for type aliases for built-in types
+ * @description Checks first time initialization via type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+import '../../../Utils/expect.dart';
+
+typedef IntAlias = int;
+typedef NumAlias = num;
+typedef DoubleAlias = double;
+typedef BoolAlias = bool;
+typedef StringAlias = String;
+
+main() {
+  IntAlias i = 1;
+  NumAlias n = 3.14;
+  DoubleAlias d = 3.1415;
+  BoolAlias b = true;
+  StringAlias s = "Lily was here";
+
+  var ii = i;
+  var nn = n;
+  var dd = d;
+  var bb = b;
+  var ss = s;
+
+  Expect.equals(1, ii);
+  Expect.equals(3.14, nn);
+  Expect.equals(3.1415, dd);
+  Expect.isTrue(bb);
+  Expect.equals("Lily was here", ss);
+
+  Expect.isTrue(ii is int);
+  Expect.isTrue(nn is num);
+  Expect.isFalse(nn is int);
+  Expect.isTrue(dd is double);
+  Expect.isTrue(bb is bool);
+  Expect.isTrue(ss is String);
+}
