diff --git a/src/php/Models/Types/BuiltinType.php b/src/php/Models/Types/BuiltinType.php
index 1474da9df42ff2c1f249a01557dbf271980c7dc5..52872ee6d30cbd11e4a2568a65310a91e2a77fce 100644
--- a/src/php/Models/Types/BuiltinType.php
+++ b/src/php/Models/Types/BuiltinType.php
@@ -52,15 +52,16 @@ class BuiltinType extends AbstractType
             case 'number':
             case 'boolean':
                 return sprintf('%s.toString()', $expr);
+            case 'null':
+            case 'undefined':
             case 'true':
             case 'false':
                 return sprintf('"%s"', $this->name);
             case 'Date':
                 return sprintf('%s.toISOString()', $expr);
-            case 'undefined':
-            case 'null':
             case 'never':
-                return '';
+            case 'unknown':
+                return sprintf('"" /* %s */', $this->name);
             default:
                 return sprintf('JSON.stringify(%s)', $expr);
         }
@@ -71,6 +72,19 @@ class BuiltinType extends AbstractType
      */
     public function checkType(string $expr, bool $explicit = false): string
     {
-        return sprintf('(typeof %s === %s)', $expr, TypescriptHelper::quoteString($this->name));
+        switch ($this->name) {
+            case 'null':
+            case 'true':
+            case 'false':
+            case 'undefined':
+                return sprintf('(%s === %s)', $expr, $this->name);
+            case 'unknown':
+            case 'any':
+                return 'true';
+            case 'Date':
+                return sprintf('(%s instanceof %s)', $expr, $this->name);
+            default:
+                return sprintf('(typeof %s === %s)', $expr, TypescriptHelper::quoteString($this->name));
+        }
     }
 }