alexthekiwi/laravel-typescript

Transform Laravel models into TypeScript interfaces

0.1.2 2023-08-20 02:20 UTC

This package is auto-updated.

Last update: 2024-04-20 03:53:10 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

The package lets you generate TypeScript types from your Laravel models.

Introduction

Say you have a model which has several properties (database columns) and multiple relations.

class Product extends Model
{
    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }

    public function features(): HasMany
    {
        return $this->hasMany(Feature::class);
    }
}

Laravel TypeScript will generate the following TypeScript type:

export type App = {
    Models: {
        Product: {
            id: number;
            category_id: number;
            name: string;
            price: number;
            created_at: string | null;
            updated_at: string | null;
            category?: App.Models.Category | null;
            features?: Array<App.Models.Feature> | null;
        }
    };
    ...
}

Laravel TypeScript supports:

  • Database columns
  • Model relations
  • Model accessors
  • Casted attributes

Installation

Laravel 8+ and PHP 8+ are required. You can install the package via composer:

composer require based/laravel-typescript

You can publish the config file with:

php artisan vendor:publish --provider="Based\TypeScript\TypeScriptServiceProvider" --tag="typescript-config"

This is the contents of the published config file:

return [
    'generators' => [
        Model::class => ModelGenerator::class,
    ],

    'output' => resource_path('js/types/models.d.ts'),

    // load namespaces from composer's `dev-autoload`
    'autoloadDev' => false,
];

Usage

Generate TypeScript interfaces.

php artisan typescript:generate

Or the shortcut:

php artisan ts:generate

Example usage with React:

import type { App } from '@/types';

interface Props {
    Product: App['Models']['Product'];
}

Testing

composer test

Credits

License

The MIT License (MIT). Please see License File for more information.