File: contextualComputedNonBindablePropertyType.ts

package info (click to toggle)
node-typescript 5.1.6%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 492,516 kB
  • sloc: javascript: 2,078,951; makefile: 6; sh: 1
file content (38 lines) | stat: -rw-r--r-- 783 bytes parent folder | download
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
}