Laravel typescript:transform未生成TS文件问题求助
排查typescript-transformer生成0个TS文件的问题
针对你遇到的执行php artisan typescript:transform后始终生成0个文件的情况,按以下步骤逐一排查:
1. 确认目标PHP类已添加识别标记
你的配置中启用了DefaultCollector和EnumCollector,只有符合以下条件的类才会被识别转换:
- 带
/** @typescript */注解的DTO/普通类 - Spatie Enum包创建的枚举类
举两个正确的示例:
DTO/普通类示例
/** @typescript */ class UserProfile { public string $username; public int $userId; public ?string $avatarUrl; }
Spatie枚举示例
use Spatie\Enum\Enum; class OrderStatus extends Enum { public const PENDING = 'pending'; public const SHIPPED = 'shipped'; public const DELIVERED = 'delivered'; }
注意:PHP 8.1+原生枚举需要额外配置支持,若使用原生枚举需确认包版本是否兼容,或添加对应Transformer。
2. 检查自动发现路径是否覆盖目标类
配置里的auto_discover_types默认仅包含app_path(),如果你的SDK类不在app目录下(比如自定义的packages/或src/目录),需要把对应路径补充进去:
'auto_discover_types' => [ app_path(), base_path('src/your-sdk'), // 替换为你的SDK实际路径 ],
可临时在配置文件中添加dd(app_path())执行命令,验证路径是否正确指向类所在目录。
3. 确保Transformer与类类型匹配
当前配置的Transformer仅支持以下类型:
SpatieStateTransformer:处理Spatie状态机类SpatieEnumTransformer:处理Spatie Enum包的枚举DtoTransformer:处理Spatie DTO包的DTO类(或带公共属性、加@typescript注解的普通类)
如果你的类不属于以上类型,需自定义Transformer,或调整类结构适配现有Transformer。
4. 清除Laravel缓存
类缓存可能导致Collector无法识别新添加的注解,执行以下命令清除缓存后重试:
php artisan optimize:clear
5. 验证输出目录权限
检查resource_path('types/')目录是否存在,且本地/服务器用户有写入权限:
- 手动创建目录:
mkdir -p resources/types - 调整权限(Linux/macOS):
chmod -R 755 resources/types
6. 检查包版本兼容性
确保spatie/laravel-typescript-transformer版本与你的Laravel版本兼容,尝试更新到最新稳定版:
composer update spatie/laravel-typescript-transformer
内容的提问来源于stack exchange,提问作者Goldie
相关产品推荐
相关产品推荐

