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
|
// @noEmit: true
// @strict: true
// repro #51906
declare function testD(): "d";
declare function forceMatch<T>(matched: {
[key in keyof T]: key;
}): void;
forceMatch({
[testD()]: "d",
});
declare function forceMatch2<T>(matched: {
[key in keyof T]: ({ key }: { key: key }) => void;
}): void;
forceMatch2({
[testD()]: ({ key }) => {},
});
// repro #52954
type Original = { foo: 'expects a string literal', baz: boolean, bar: number }
type Mapped = {
[prop in keyof Original]: (arg: Original[prop]) => Original[prop]
}
const propSelector = <propName extends string>(propName: propName): propName => propName;
const unexpectedlyFailingExample: Mapped = {
foo: (arg) => 'expects a string literal',
baz: (arg) => true,
[propSelector('bar')]: (arg) => 51345
}
|