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

wvt8vs2t  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(186)

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

Type? typeFor(String name) {
  // simple examples
  if (name == 'String') return String;
  if (name == 'bool') return bool;
  return null;
}

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

Type typeFor(String name) {
  // simple examples
  if (name == 'String') return String;
  if (name == 'bool') return bool;
  return Object?;
}


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

eeq64g8w

eeq64g8w1#

您可以使用类型别名:

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

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

Type typeFor(String name) {
  // simple examples
  if (name == 'String') return String;
  if (name == 'bool') return bool;
  return typeof<Object?>;
}

guicsvcw

guicsvcw2#

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

/// Identity function for a [Type].
///
/// This can be used in situations where a type literal is syntactically
/// invalid.
///
/// Example:
/// ```dart
/// x.runtimeType == int?; // Compile-time error due to invalid syntax.
/// x.runtimeType == identityType<int?>();
/// ```
Type identityType<T>() => T;

Type typeFor(String name) {
  // simple examples
  if (name == 'String') return String;
  if (name == 'bool') return bool;
  return identityType<Object?>();
}

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

相关问题