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

如何用Dart的typedef定义与TS泛型foo<A>结构一致的Map类型?

Dart 对应TS泛型对象类型的typedef实现

你给出的TypeScript泛型类型是固定包含val、fns两个字段的结构化对象,Dart中不推荐用Map实现该结构——Map是动态键值对结构,无法对固定字段做静态类型约束,不同场景的对应实现如下:

  • Dart 3.0+ 推荐写法(和TS结构完全对齐)
    Dart 3.0 及以上版本支持的Record类型可以完美对标TS的对象字面量类型,泛型typedef写法为:

    typedef Foo<A> = ({
      A val,
      List<void Function(A)> fns,
    });
    

    类型对应关系:

    • TS的Array<T> 对应 Dart的List<T>
    • TS的(a: A) => void 对应 Dart的void Function(A)
      该写法支持完整的静态类型检查,使用示例:
    final demo: Foo<String> = (
      val: "test",
      fns: [
        (item) => print(item.length)
      ]
    );
    
  • 强制使用Map类型的写法(不推荐)
    如果业务场景必须使用Map结构,只能做通用键值类型约束,无法强制要求Map必须存在指定字段、也无法做严格的泛型关联校验,写法为:

    typedef Foo<A> = Map<String, dynamic>;
    

    该写法下你需要自行做运行时的字段存在性、类型校验。

  • Dart 3.0以下版本兼容写法
    低于3.0的Dart版本没有Record类型,推荐用抽象类定义类型接口,类型安全性远高于Map:

    abstract class Foo<A> {
      A get val;
      List<void Function(A)> get fns;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:24:24