bolzer/ts-const-enum

A command line tool to generate typescript constants from your php constants

0.2 2021-07-28 22:05 UTC

This package is auto-updated.

Last update: 2024-04-29 04:34:23 UTC


README

maintained

Description

This tool will transform PHP Scalar-Constants - which are annotated with the provided attributes - to Typescript Constants and generates Typescript Enums from annotated PHP one dimensional constant arrays. This may be useful if you want to reference a value in a condition within your Typescript Code. You can easily import the generated constants. This has many advantages over just stating the value. If the value of the constant changes, your code won't break easily. If you change the name of a php constant the typescript code won't compile unless you changed all occurrences of the old constant name.

This is especially useful if you use alot of JS/TS-Frameworks and do conditionally rendering in regards to values / properties. The Constants are by default prefixed with the declaring class followed by __ and the constant name. You may provide an alias on attribute-level. Keep in mind to have unique names / alias as the constants will land in one file.

Usecase

Before

if (reflection.type === 16) {
    // Do something when true
}

After

import {TARGET_CLASS_CONSTANT} from "./constants";

if (reflection.type === TARGET_CLASS_CONSTANT) {
    // Do something when true
}

Installation

  1. Require the dependency
composer require bolzer/ts-const-enum
  1. Create in your root (where the vendor folder is) dir a config file
touch .ts-const-enum-config.php
  1. Add the following content to the previously created file with the output path.
<?php declare(strict_types=1);

use Bolzer\TsConstEnum\Configuration\Config;

return (new Config())
    ->setOutputPath(__DIR__ . '/generated/constants.ts')
;
  1. Take a look at the config class for more config option.
  2. Annotate some constants and arrays in your php code with the provided attributes Constant and Enum

Example

<?php declare(strict_types=1);

namespace Test\Example;

use Bolzer\TsConstEnum\Attributes\Constant;use Bolzer\TsConstEnum\Attributes\Enum;

class ExampleClass {
    #[Constant(alias: "Test")]
    private const TEST = "test";
    
    #[Enum]
    private const TEST_2 = [
        self::TEST => "value"
    ];
}
  1. Run the binary of the tool
composer dump-autoload -o --quiet
php ./vendor/bin/ts-const-enum.php generate
  1. Start using the constants

What's a makeshift enum in PHP?

Currently there're no enums in PHP. This will change with the release of PHP 8.2. However, those enums need to be transformed to typescript enums too. In the meantime i use constructs like these:

class Membership {
    public const FREE = "free";
    public const PREMIUM = "premium";
    
    public const TYPES = [
        self::FREE,
        self::PREMIUM
    ];  
}

The constant "TYPES" is a makeshift enum. Those constructs will be transformed too. This will translate to the following enum in Typescript

export enum Membership_TYPES { 
    'FREE' = 'free', 
    'PREMIUM' = 'premium',
}