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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
=== tests/cases/compiler/contextualComputedNonBindablePropertyType.ts ===
// repro #51906
declare function testD(): "d";
>testD : () => "d"
declare function forceMatch<T>(matched: {
>forceMatch : <T>(matched: { [key in keyof T]: key; }) => void
>matched : { [key in keyof T]: key; }
[key in keyof T]: key;
}): void;
forceMatch({
>forceMatch({ [testD()]: "d",}) : void
>forceMatch : <T>(matched: { [key in keyof T]: key; }) => void
>{ [testD()]: "d",} : { d: "d"; }
[testD()]: "d",
>[testD()] : "d"
>testD() : "d"
>testD : () => "d"
>"d" : "d"
});
declare function forceMatch2<T>(matched: {
>forceMatch2 : <T>(matched: { [key in keyof T]: ({ key }: { key: key; }) => void; }) => void
>matched : { [key in keyof T]: ({ key }: { key: key; }) => void; }
[key in keyof T]: ({ key }: { key: key }) => void;
>key : key
>key : key
}): void;
forceMatch2({
>forceMatch2({ [testD()]: ({ key }) => {},}) : void
>forceMatch2 : <T>(matched: { [key in keyof T]: ({ key }: { key: key; }) => void; }) => void
>{ [testD()]: ({ key }) => {},} : { d: ({ key }: { key: "d"; }) => void; }
[testD()]: ({ key }) => {},
>[testD()] : ({ key }: { key: "d"; }) => void
>testD() : "d"
>testD : () => "d"
>({ key }) => {} : ({ key }: { key: "d"; }) => void
>key : "d"
});
// repro #52954
type Original = { foo: 'expects a string literal', baz: boolean, bar: number }
>Original : { foo: 'expects a string literal'; baz: boolean; bar: number; }
>foo : "expects a string literal"
>baz : boolean
>bar : number
type Mapped = {
>Mapped : { foo: (arg: "expects a string literal") => "expects a string literal"; baz: (arg: boolean) => boolean; bar: (arg: number) => number; }
[prop in keyof Original]: (arg: Original[prop]) => Original[prop]
>arg : Original[prop]
}
const propSelector = <propName extends string>(propName: propName): propName => propName;
>propSelector : <propName extends string>(propName: propName) => propName
><propName extends string>(propName: propName): propName => propName : <propName extends string>(propName: propName) => propName
>propName : propName
>propName : propName
const unexpectedlyFailingExample: Mapped = {
>unexpectedlyFailingExample : Mapped
>{ foo: (arg) => 'expects a string literal', baz: (arg) => true, [propSelector('bar')]: (arg) => 51345} : { foo: (arg: "expects a string literal") => "expects a string literal"; baz: (arg: boolean) => true; bar: (arg: number) => number; }
foo: (arg) => 'expects a string literal',
>foo : (arg: "expects a string literal") => "expects a string literal"
>(arg) => 'expects a string literal' : (arg: "expects a string literal") => "expects a string literal"
>arg : "expects a string literal"
>'expects a string literal' : "expects a string literal"
baz: (arg) => true,
>baz : (arg: boolean) => true
>(arg) => true : (arg: boolean) => true
>arg : boolean
>true : true
[propSelector('bar')]: (arg) => 51345
>[propSelector('bar')] : (arg: number) => number
>propSelector('bar') : "bar"
>propSelector : <propName extends string>(propName: propName) => propName
>'bar' : "bar"
>(arg) => 51345 : (arg: number) => number
>arg : number
>51345 : 51345
}
|