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.
Laravel 10+ and PHP 8.1 are required.
You can install the package via composer:
composer require basedcollective/laravel-typescriptGenerate TypeScript interfaces:
php artisan typescript:generateExample 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>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,
];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
composer test- Ostap Brehin
- Boris Lepikhin (original author)
- All Contributors
The MIT License (MIT). Please see License File for more information.