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
Requires
- php: ^8.1
- illuminate/contracts: ^10.0 || ^11.0 || ^12.0
- illuminate/database: ^10.0 || ^11.0 || ^12.0
- illuminate/support: ^10.0 || ^11.0 || ^12.0
- spatie/laravel-package-tools: ^1.11.0
Requires (Dev)
- larastan/larastan: ^2.0 || ^3.0
- orchestra/testbench: ^8.0 || ^9.0 || ^10.0
- phpunit/phpunit: ^10.0 || ^11.0
This package is not auto-updated.
Last update: 2026-02-02 10:42:43 UTC
README
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
- Ostap Brehin
- Boris Lepikhin (original author)
- All Contributors
License
The MIT License (MIT). Please see License File for more information.