1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
=== tests/cases/compiler/substitutionTypesInIndexedAccessTypes.ts ===
// Repro from #31086
type UserArgs = {
>UserArgs : { select?: boolean | undefined; }
select?: boolean
>select : boolean | undefined
};
type Subset<T, U> = { [key in keyof T]: key extends keyof U ? T[key] : never };
>Subset : Subset<T, U>
declare function withBoundary<T extends UserArgs>(args?: Subset<T, UserArgs>): T;
>withBoundary : <T extends UserArgs>(args?: Subset<T, UserArgs>) => T
>args : Subset<T, UserArgs> | undefined
declare function withoutBoundary<T extends UserArgs>(args?: T): T;
>withoutBoundary : <T extends UserArgs>(args?: T) => T
>args : T | undefined
const boundaryResult = withBoundary({
>boundaryResult : { select: true; }
>withBoundary({ select: true,}) : { select: true; }
>withBoundary : <T extends UserArgs>(args?: Subset<T, UserArgs> | undefined) => T
>{ select: true,} : { select: true; }
select: true,
>select : true
>true : true
});
const withoutBoundaryResult = withoutBoundary({
>withoutBoundaryResult : { select: true; }
>withoutBoundary({ select: true,}) : { select: true; }
>withoutBoundary : <T extends UserArgs>(args?: T | undefined) => T
>{ select: true,} : { select: true; }
select: true,
>select : true
>true : true
});
|