Closed
Description
π Search Terms
mapped type assignability regression
π Version & Regression Information
- This changed between versions 5.3 and 5.4
β― Playground Link
π» Code
type ValueType = string;
type Box<T extends ValueType> = { v: T };
type Test<T extends ValueType[]> = T
type UnboxArray<T> = {
[K in keyof T]: T[K] extends Box<infer R> ? R : never;
};
type Identity<T> = { [K in keyof T]: T[K] };
declare function fnBad<T extends Array<Box<ValueType>>>(...args: T): Test<Identity<UnboxArray<T>>>;
declare function fnOk<T extends Array<Box<ValueType>>>(...args: T): Test<UnboxArray<T>>;
type Unbox<T> = T extends Array<Box<infer R>> ? Array<R> : never;
declare function fnSimilar<T extends Array<Box<ValueType>>>(...args: T): Test<Identity<Unbox<T>>>;
π Actual behavior
Test<Identity<UnboxArray<T>>>
is being reported as an error because Identity<UnboxArray<T>>
is not assignable to the constraint of Test
. Even more strange the error elaboration says Type 'Box<string>' is not assignable to type 'string'
which is strange since the type that comes out of UnboxArray<T>
can't have Box<string>
as an item type. If we don't pass the type though the Identity
mapped type, then UnboxArray<T>
is assignable to ValueType[]
.
π Expected behavior
Test<Identity<UnboxArray<T>>>
should not be an error as it is in 5.3
Additional information about the issue
No response