我正在努力分配具有多个"参数"的函数类型;类型变量。我好像搞不懂语法。
我可以使用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
的上级和子类型,即使它不是完全相同的类型。这比"完全相同的类型"要安全得多。