【发布时间】:2017-08-24 10:15:37
【问题描述】:
TypeScript,--strictNullChecks 模式。
假设我有一个可空字符串数组(string | null)[]。什么是single-expression 方法来删除所有空值,以使结果具有string[] 类型?
const array: (string | null)[] = ["foo", "bar", null, "zoo", null];
const filterdArray: string[] = ???;
Array.filter 在这里不起作用:
// Type '(string | null)[]' is not assignable to type 'string[]'
array.filter(x => x != null);
数组推导可以工作,但 TypeScript 不支持。
实际上,该问题可以概括为通过从联合中删除具有一种特定类型的条目来过滤任何联合类型的数组的问题。但让我们关注具有 null 和可能未定义的联合,因为这些是最常见的用例。
【问题讨论】:
-
遍历数组有什么问题,检查他的索引是否为空,如果不将它们添加到过滤后的数组中?
-
Iteration+if+insertion 是我现在所做的。我觉得它太罗嗦了。
-
在操场上,它与您发布的
array.filter配合得很好。它甚至不需要: string[],这就足够了:const filterdArray = array.filter(x => x != null);并且编译器推断filterdArray是string[]类型。你用的是什么版本的打字稿? -
在操场上选择 Options 并检查 strictNullChecks
标签: typescript null