如何在Dart中为可空类型返回Type对象?

wvt8vs2t  于 2024-01-04  发布在  其他
关注(0)|答案(2)|浏览(224)

我有一个代码生成库,它需要知道正在生成的Type
我的大多数代码都能正常工作,因为类型“wrapper”可以简单地知道它所关联的Type。但在一种情况下,我知道类型是Object?,我想返回它。
但我找不到一个方法来真正做到这一点!
下面是运行良好的代码:

  1. Type? typeFor(String name) {
  2. // simple examples
  3. if (name == 'String') return String;
  4. if (name == 'bool') return bool;
  5. return null;
  6. }

字符串
现在,如果我尝试添加Object?

  1. Type typeFor(String name) {
  2. // simple examples
  3. if (name == 'String') return String;
  4. if (name == 'bool') return bool;
  5. return Object?;
  6. }


Dart认为Object?实际上是一个不完全的三元运算符:(。
我试过(Object?),但它也不工作。
在Dart中表示可空类型是否有解决方案?

eeq64g8w

eeq64g8w1#

您可以使用类型别名:

  1. typedef typeof<T> = T; // ignore: camel_case_types

字符串
(Or如果您想遵循样式指南,可以给予一个 Camel 式大小写的名称,如TypeOf。)
然后你可以把 any 类型写成typeof<TheType>这样的表达式。

  1. Type typeFor(String name) {
  2. // simple examples
  3. if (name == 'String') return String;
  4. if (name == 'bool') return bool;
  5. return typeof<Object?>;
  6. }

guicsvcw

guicsvcw2#

使用泛型函数,在该函数中可以将类型作为类型参数传递:

  1. /// Identity function for a [Type].
  2. ///
  3. /// This can be used in situations where a type literal is syntactically
  4. /// invalid.
  5. ///
  6. /// Example:
  7. /// ```dart
  8. /// x.runtimeType == int?; // Compile-time error due to invalid syntax.
  9. /// x.runtimeType == identityType<int?>();
  10. /// ```
  11. Type identityType<T>() => T;
  12. Type typeFor(String name) {
  13. // simple examples
  14. if (name == 'String') return String;
  15. if (name == 'bool') return bool;
  16. return identityType<Object?>();
  17. }

字符串
(My dartbag package也提供了上面的identityType函数,尽管它显然非常简单。)

展开查看全部

相关问题