Package Data | |
---|---|
Maintainer Username: | lepikhinb |
Maintainer Contact: | boris@lepikhin.com (Boris Lepikhin) |
Package Create Date: | 2021-07-23 |
Package Last Update: | 2024-03-02 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-18 03:00:46 |
Package Statistics | |
---|---|
Total Downloads: | 126,154 |
Monthly Downloads: | 2,345 |
Daily Downloads: | 37 |
Total Stars: | 391 |
Total Watchers: | 6 |
Total Forks: | 46 |
Total Open Issues: | 16 |
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:
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.