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
相关产品推荐
相关产品推荐

