我正在使用 Dart 中的一个包含可空元素的列表。我想过滤掉这些null
值,并得到一个List
包含非可空元素的列表。这是我使用的代码:
List<int?> t = [1, 2, 3, 4, null, 5];
List<int> tWithOutNulls = t.where((e) => e != null).map((e) => e).toList();
但是,此行出现类型错误:
A value of type 'List<int?>' can't be assigned to a variable of type 'List<int>'.
我可以通过使用非空断言明确转换来修复它:
List<int> tWithOutNulls = t.where((e) => e != null).map((e) => e!).toList();
但我想知道在 Dart 中是否有更优雅或更惯用的方法来实现这一点。例如,在 TypeScript 中,我们可以使用这样的类型保护函数:
function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
return value !== null && value !== undefined;
}
const array: (string | null)[] = ['foo', 'bar', null, 'zoo', null];
const filteredArray: string[] = array.filter(notEmpty);