From f25e60af655dcdd0a897d6c83fd1b65eecd713ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@inrae.fr> Date: Thu, 2 Apr 2020 15:58:32 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20les=20type-checks=20et=20casts?= =?UTF-8?q?=20des=20types=20"built-ins".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notamment pour true, false, undefined et null qui sont des singletons. --- src/php/Models/Types/BuiltinType.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/php/Models/Types/BuiltinType.php b/src/php/Models/Types/BuiltinType.php index 1474da9..52872ee 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)); + } } } -- GitLab