Transform Laravel models into TypeScript interfaces

Fund package maintenance!

Installs: 116 064

Dependents: 0

Suggesters: 0

Security: 0

Stars: 382

Watchers: 6

Forks: 45

Open Issues: 16

v0.0.4 2023-07-06 21:24 UTC

This package is auto-updated.

Last update: 2024-06-26 20:05:21 UTC


Laravel TypeScript

Latest Version on Packagist GitHub Tests Action Status Total Downloads

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


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


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,


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,


composer test



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