basedcollective/laravel-typescript

Transform Laravel models into TypeScript interfaces

Installs: 5

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/basedcollective/laravel-typescript

v0.0.5 2026-02-01 18:07 UTC

This package is not auto-updated.

Last update: 2026-02-02 13:47:55 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

Note

This is an up-to-date, maintained fork of the abandoned laravel-typescript package.

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

Installation

Laravel 10+ and PHP 8.1 are required.

You can install the package via composer:

composer require basedcollective/laravel-typescript

Usage

Generate TypeScript interfaces:

php artisan typescript:generate

Example usage with Vue 3:

<script setup lang="ts">
defineProps<{
    product: App.Models.Product;
}>();
</script>

<template>
    <h1>{{ product.name }}</h1>
    <p>Price: ${{ product.price }}</p>
</template>

Configuration

Optionally, you can publish the config file:

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/models.d.ts'),

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

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 interface:

declare namespace App.Models {
    export interface 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

Testing

composer test

Credits

License

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