Skip to content

BasedCollective/laravel-typescript

Repository files navigation

Laravel TypeScript

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.

About

Generate TypeScript interfaces from Laravel models.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages