首页 > 解决方案 > 为什么 TypeScript 将过滤后的字符串数组解释为字符串 | 布尔数组

问题描述

我有以下表达式

[isProduction() && '/prod-path', 'first', 'second'].filter(Boolean)

TypeScript 不同意这是一个字符串 []。谁能告诉我为什么?

标签: typescript

解决方案


如果 isProduction 为假,你最终会得到:

[false, 'first', 'second']

正如 Typescript 所说,一个Array<string|boolean>.

过滤器不会在类型级别上过滤掉布尔值。您必须像这样手动说出它:

.filter((item):item is string => Boolean(item))

推荐阅读