类型在映射数组中未对齐



以下面的简化代码为例(我已经从实际用例中简化了它,以找到问题的根源(:

type TStringWrapper<C extends string> = { wrappedString: C };
type TWrapIfArrayOfStrings<S> = S extends Array<string>
? {
[K in keyof S]: TStringWrapper<S[K]>
}
: never;

我得到以下编译器错误:

Type 'S[K]' does not satisfy the constraint 'string'.
Type 'S[keyof S]' is not assignable to type 'string'.
Type 'S[string] | S[number] | S[symbol]' is not assignable to type 'string'.
Type 'S[string]' is not assignable to type 'string'.

据我所见,这应该是编译的,因为S[K]之前有条件,所以它保证是一个字符串。如何重写它才能工作?

试试这个:

type TStringWrapper<C extends string> = { wrappedString: C };
type TWrapIfArrayOfStrings<S> = S extends Array<string>
? {
[K in keyof S & number]: TStringWrapper<S[K]>
}
: never;

你知道S扩展了Array<string>,那么S的密钥是number,而不是像S[0], S[1] ...那样的string,等等

这是一个工作示例。

最新更新