based/laravel-typescript
Laravel TypeScript
The package lets you generate TypeScript interfaces 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 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
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/models.d.ts'),
// load namespaces from composer's `dev-autoload`
'autoloadDev' => false,
];
Usage
Generate TypeScript interfaces.
php artisan typescript:generate
Example usage with Vue 3:
import { defineComponent, PropType } from "vue";
export default defineComponent({
props: {
product: {
type: Object as PropType<App.Models.Product>,
required: true,
},
},
}
Testing
composer test
Credits
License
The MIT License (MIT). Please see License File for more information.
Related Packages
Automatically generate TypeScript types and validation schemas from Laravel Mode...
Generate TypeScript representations of your Laravel actions and routes.
A Laravel starter kit with Ant Design, Inertia, React, and TypeScript optimized...
Modern admin dashboard boilerplate - Laravel 13 + Inertia.js + React 19 + TypeSc...