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

Dart/Flutter中TypeScript typeof的等效类型引用实现咨询

Dart中是否有类似TypeScript typeof 的类型提取方式?

我希望从类、变量或函数中直接复制类型,不用手动重复定义。这样在包装其他类或函数时,如果原变量/参数的类型发生变更,只需要更新实现部分,不用修改类型定义。想知道Dart里有没有等效于TypeScript中typeof的用法,来减少冗余的类型重复?

TypeScript示例代码

class A {
  myFunction(arg: string): number {
    return parseInt(arg);
  }
}

class CustomA { 
  customMyFunction(arg: string, cb: typeof A['myFunction']) {}
}

期望的Dart代码形式

@swidget
Switch customSwitch(
  typeof Switch['value'] value,
  typeof Switch['onChanged'] onChanged,
) {
  return Switch(value: value, onChanged: onChanged);
}

解决方案

Dart本身并没有像TypeScript那样直接通过typeof语法提取类成员类型的功能,但可以通过以下几种方式实现类似的类型复用效果:

  • 使用类型别名(typedef)
    对于函数类型,你可以先定义和原类成员匹配的类型别名,后续直接复用这个别名。比如针对Switch的onChanged方法:

    // 直接复用Flutter内置的ValueChanged<bool>,或者自定义别名
    typedef SwitchOnChanged = ValueChanged<bool>;
    
    Switch customSwitch(
      bool value,
      SwitchOnChanged onChanged,
    ) {
      return Switch(value: value, onChanged: onChanged);
    }
    

    这种方式下,如果原类成员类型变更,只需要修改别名的定义即可,不用逐个修改所有使用的地方。

  • 复用已有类型
    对于像Switch.value这种明确的基础类型(比如bool),直接使用对应的基础类型即可。虽然无法完全和原类成员“绑定”,但本身基础类型变更的概率极低,也能减少冗余。

  • 代码生成工具
    如果是大规模的类型复用场景,可以借助build_runner这类代码生成工具,自定义注解或扫描逻辑,自动生成原类成员的类型定义。当原类更新时,重新运行生成命令就能同步类型,无需手动修改。


内容的提问来源于stack exchange,提问作者pacifica94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:15:29