Dart:将具有多个"arguments"的函数类型分配给类型变量



我正在努力分配具有多个"参数"的函数类型;类型变量。我好像搞不懂语法。

我可以使用typedef: 定义一个类型typedef foo = int Function(int)

,但不能将相同的类型赋值给type变量:

Type foo = int Function(int)

我不想使用typedef的原因是你只能在全局作用域中使用它。

有人知道如何解决这个问题或者为什么它不起作用吗?谢谢大家的回答☺️

函数类型不是类型文字,因此不能将其用作表达式。

现在很容易绕过这个问题:

typedef typeof<T> = T;

Type foo = typeOf<int Function(int)>;

现在,我不建议使用Type对象做任何事情。尤其是在单元测试中。对于类型对象,你唯一能做的就是检查是否相等。如果类型有一点偏差,它就不相等。例如,Object? Function(Object?)不等于dynamic Function(dynamic),尽管它们是相互的子类型。

如果你想检查一个函数是否为int Function(int),使用is int Function(int)。如果您想检查类型参数是否绑定到int Function(int),我不知道测试包是否有简单的方法来做到这一点,但我会使用像

这样的辅助函数:
bool isType<T1, T2> => <T1 Function(T1)>[] is List<T2 Function(T2)>;

这检查T1同时是T2的上级和子类型,即使它不是完全相同的类型。这比"完全相同的类型"要安全得多。

相关内容

  • 没有找到相关文章

最新更新