{ "uuid": [ { "value": "5af463dd-91dc-45a4-a0bc-58212e30d402" } ], "langcode": [ { "value": "en" } ], "type": [ { "target_id": "daily_email", "target_type": "node_type", "target_uuid": "8bde1f2f-eef9-4f2d-ae9c-96921f8193d7" } ], "revision_timestamp": [ { "value": "2025-05-11T09:00:02+00:00" } ], "revision_uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "revision_log": [], "status": [ { "value": true } ], "uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "title": [ { "value": "TypeScript for PHP" } ], "created": [ { "value": "2025-01-18T00:00:00+00:00" } ], "changed": [ { "value": "2025-05-11T09:00:02+00:00" } ], "promote": [ { "value": false } ], "sticky": [ { "value": false } ], "default_langcode": [ { "value": true } ], "revision_translation_affected": [ { "value": true } ], "path": [ { "alias": "\/daily\/2025\/01\/18\/typescript-php", "langcode": "en" } ], "body": [ { "value": "\n
During one of Nuno Maduro's live streams, he was speaking about static analysis and PHPStan when either he or someone in the chat said \"PHPStan is TypeScript for PHP\".<\/p>\n\n
I thought this was an interesting comparison.<\/p>\n\n
PHP has types and type checking - the same as TypeScript - but it's only performed when the code is executed.<\/p>\n\n
TypeScript's build step will run its type checks and identify any errors when compiling the application.<\/p>\n\n
Static analysis tools do the same for PHP, allowing you to execute the type checks without executing the code.<\/p>\n\n
The means you can do it from the command line, in an IDE or text editor, or in a CI pipeline.<\/p>\n\n