You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:23:17