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 47 48 49 50 51 52 53
|
=== tests/cases/compiler/conditionalTypeContextualTypeSimplificationsSuceeds.ts ===
// repro from https://github.com/Microsoft/TypeScript/issues/26395
interface Props {
when: (value: string) => boolean;
>when : (value: string) => boolean
>value : string
}
function bad<P extends Props>(
>bad : <P extends Props>(attrs: string extends keyof P ? { [K in keyof P]: P[K]; } : { [K in keyof P]: P[K]; }) => void
attrs: string extends keyof P ? { [K in keyof P]: P[K] } : { [K in keyof P]: P[K] }) { }
>attrs : string extends keyof P ? { [K in keyof P]: P[K]; } : { [K in keyof P]: P[K]; }
function good1<P extends Props>(
>good1 : <P extends Props>(attrs: string extends keyof P ? P : { [K in keyof P]: P[K]; }) => void
attrs: string extends keyof P ? P : { [K in keyof P]: P[K] }) { }
>attrs : string extends keyof P ? P : { [K in keyof P]: P[K]; }
function good2<P extends Props>(
>good2 : <P extends Props>(attrs: { [K in keyof P]: P[K]; }) => void
attrs: { [K in keyof P]: P[K] }) { }
>attrs : { [K in keyof P]: P[K]; }
bad({ when: value => false });
>bad({ when: value => false }) : void
>bad : <P extends Props>(attrs: string extends keyof P ? { [K in keyof P]: P[K]; } : { [K in keyof P]: P[K]; }) => void
>{ when: value => false } : { when: (value: string) => false; }
>when : (value: string) => false
>value => false : (value: string) => false
>value : string
>false : false
good1({ when: value => false });
>good1({ when: value => false }) : void
>good1 : <P extends Props>(attrs: string extends keyof P ? P : { [K in keyof P]: P[K]; }) => void
>{ when: value => false } : { when: (value: string) => false; }
>when : (value: string) => false
>value => false : (value: string) => false
>value : string
>false : false
good2({ when: value => false });
>good2({ when: value => false }) : void
>good2 : <P extends Props>(attrs: { [K in keyof P]: P[K]; }) => void
>{ when: value => false } : { when: (value: string) => false; }
>when : (value: string) => false
>value => false : (value: string) => false
>value : string
>false : false
|