首页 > 解决方案 > 条件类型中的 boolean[] 扩展为 true[] | 错误的[]

问题描述

此条件类型尝试将类型参数U转换为数组:

type MakeArray<U> = U extends boolean ? Array<U> : U;

但是,当通过时boolean

type T5 = MakeArray<boolean>;

结果是type T5 = true[] | false[]

我见过https://github.com/microsoft/TypeScript/issues/30029但这似乎处理承诺/返回值,并且理论上已在 TS 3.5 中修复。

即 AFAICT 那个问题是关于原语和分布在联合上,但我明确地检查了extends boolean而不是像extends boolean | number | string.

标签: typescriptconditional-types

解决方案


答案可能有点晚了,但是如果像这样的数组,它可以通过推断类型参数来工作

type MakeArray<T, V = T> = T extends Array<infer V> ? T : Array<V>;

type TBoolean = MakeArray<boolean>; // boolean[]
type TBooleanArray = MakeArray<Array<boolean>>; // boolean[]

type TString = MakeArray<string>; // string[]
type TStringArray = MakeArray<Array<string>>; // string[]

推荐阅读