Skip to content

Commit 58d90d4

Browse files
committed
Add tests
1 parent 5efd8ee commit 58d90d4

8 files changed

+228
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [genericInferenceDefaultTypeParameter.ts]
2+
// Repro from #50858
3+
4+
type Type = {
5+
a: (e: string) => void;
6+
b: (e: number) => void;
7+
}
8+
9+
declare function f1<T extends keyof Type = "a">(props: Type[T]): void;
10+
11+
f1(event => { });
12+
f1<"a">(event => { });
13+
f1<"b">(event => { });
14+
15+
16+
//// [genericInferenceDefaultTypeParameter.js]
17+
"use strict";
18+
// Repro from #50858
19+
f1(function (event) { });
20+
f1(function (event) { });
21+
f1(function (event) { });
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/genericInferenceDefaultTypeParameter.ts ===
2+
// Repro from #50858
3+
4+
type Type = {
5+
>Type : Symbol(Type, Decl(genericInferenceDefaultTypeParameter.ts, 0, 0))
6+
7+
a: (e: string) => void;
8+
>a : Symbol(a, Decl(genericInferenceDefaultTypeParameter.ts, 2, 13))
9+
>e : Symbol(e, Decl(genericInferenceDefaultTypeParameter.ts, 3, 8))
10+
11+
b: (e: number) => void;
12+
>b : Symbol(b, Decl(genericInferenceDefaultTypeParameter.ts, 3, 27))
13+
>e : Symbol(e, Decl(genericInferenceDefaultTypeParameter.ts, 4, 8))
14+
}
15+
16+
declare function f1<T extends keyof Type = "a">(props: Type[T]): void;
17+
>f1 : Symbol(f1, Decl(genericInferenceDefaultTypeParameter.ts, 5, 1))
18+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameter.ts, 7, 20))
19+
>Type : Symbol(Type, Decl(genericInferenceDefaultTypeParameter.ts, 0, 0))
20+
>props : Symbol(props, Decl(genericInferenceDefaultTypeParameter.ts, 7, 48))
21+
>Type : Symbol(Type, Decl(genericInferenceDefaultTypeParameter.ts, 0, 0))
22+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameter.ts, 7, 20))
23+
24+
f1(event => { });
25+
>f1 : Symbol(f1, Decl(genericInferenceDefaultTypeParameter.ts, 5, 1))
26+
>event : Symbol(event, Decl(genericInferenceDefaultTypeParameter.ts, 9, 3))
27+
28+
f1<"a">(event => { });
29+
>f1 : Symbol(f1, Decl(genericInferenceDefaultTypeParameter.ts, 5, 1))
30+
>event : Symbol(event, Decl(genericInferenceDefaultTypeParameter.ts, 10, 8))
31+
32+
f1<"b">(event => { });
33+
>f1 : Symbol(f1, Decl(genericInferenceDefaultTypeParameter.ts, 5, 1))
34+
>event : Symbol(event, Decl(genericInferenceDefaultTypeParameter.ts, 11, 8))
35+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/genericInferenceDefaultTypeParameter.ts ===
2+
// Repro from #50858
3+
4+
type Type = {
5+
>Type : { a: (e: string) => void; b: (e: number) => void; }
6+
7+
a: (e: string) => void;
8+
>a : (e: string) => void
9+
>e : string
10+
11+
b: (e: number) => void;
12+
>b : (e: number) => void
13+
>e : number
14+
}
15+
16+
declare function f1<T extends keyof Type = "a">(props: Type[T]): void;
17+
>f1 : <T extends keyof Type = "a">(props: Type[T]) => void
18+
>props : Type[T]
19+
20+
f1(event => { });
21+
>f1(event => { }) : void
22+
>f1 : <T extends keyof Type = "a">(props: Type[T]) => void
23+
>event => { } : (event: string) => void
24+
>event : string
25+
26+
f1<"a">(event => { });
27+
>f1<"a">(event => { }) : void
28+
>f1 : <T extends keyof Type = "a">(props: Type[T]) => void
29+
>event => { } : (event: string) => void
30+
>event : string
31+
32+
f1<"b">(event => { });
33+
>f1<"b">(event => { }) : void
34+
>f1 : <T extends keyof Type = "a">(props: Type[T]) => void
35+
>event => { } : (event: number) => void
36+
>event : number
37+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [genericInferenceDefaultTypeParameterJsxReact.tsx]
2+
/// <reference path="/.lib/react16.d.ts" />
3+
4+
// Repro from #50858
5+
6+
import React, { ComponentPropsWithRef, ElementType, ReactNode } from 'react';
7+
8+
type ButtonBaseProps<T extends ElementType> = ComponentPropsWithRef<T> & { children?: ReactNode };
9+
10+
function Component<T extends ElementType = 'span'>(props: ButtonBaseProps<T>) {
11+
return <></>;
12+
}
13+
14+
const v1 = <Component onClick={e => e.preventDefault()} />;
15+
16+
17+
//// [genericInferenceDefaultTypeParameterJsxReact.js]
18+
"use strict";
19+
/// <reference path="react16.d.ts" />
20+
var __importDefault = (this && this.__importDefault) || function (mod) {
21+
return (mod && mod.__esModule) ? mod : { "default": mod };
22+
};
23+
exports.__esModule = true;
24+
// Repro from #50858
25+
var react_1 = __importDefault(require("react"));
26+
function Component(props) {
27+
return react_1["default"].createElement(react_1["default"].Fragment, null);
28+
}
29+
var v1 = react_1["default"].createElement(Component, { onClick: function (e) { return e.preventDefault(); } });
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
=== tests/cases/compiler/genericInferenceDefaultTypeParameterJsxReact.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
4+
// Repro from #50858
5+
6+
import React, { ComponentPropsWithRef, ElementType, ReactNode } from 'react';
7+
>React : Symbol(React, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 6))
8+
>ComponentPropsWithRef : Symbol(ComponentPropsWithRef, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 15))
9+
>ElementType : Symbol(ElementType, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 38))
10+
>ReactNode : Symbol(ReactNode, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 51))
11+
12+
type ButtonBaseProps<T extends ElementType> = ComponentPropsWithRef<T> & { children?: ReactNode };
13+
>ButtonBaseProps : Symbol(ButtonBaseProps, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 77))
14+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 6, 21))
15+
>ElementType : Symbol(ElementType, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 38))
16+
>ComponentPropsWithRef : Symbol(ComponentPropsWithRef, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 15))
17+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 6, 21))
18+
>children : Symbol(children, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 6, 74))
19+
>ReactNode : Symbol(ReactNode, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 51))
20+
21+
function Component<T extends ElementType = 'span'>(props: ButtonBaseProps<T>) {
22+
>Component : Symbol(Component, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 6, 98))
23+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 8, 19))
24+
>ElementType : Symbol(ElementType, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 38))
25+
>props : Symbol(props, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 8, 51))
26+
>ButtonBaseProps : Symbol(ButtonBaseProps, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 4, 77))
27+
>T : Symbol(T, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 8, 19))
28+
29+
return <></>;
30+
}
31+
32+
const v1 = <Component onClick={e => e.preventDefault()} />;
33+
>v1 : Symbol(v1, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 12, 5))
34+
>Component : Symbol(Component, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 6, 98))
35+
>onClick : Symbol(onClick, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 12, 21))
36+
>e : Symbol(e, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 12, 31))
37+
>e.preventDefault : Symbol(React.SyntheticEvent.preventDefault, Decl(react16.d.ts, 642, 31))
38+
>e : Symbol(e, Decl(genericInferenceDefaultTypeParameterJsxReact.tsx, 12, 31))
39+
>preventDefault : Symbol(React.SyntheticEvent.preventDefault, Decl(react16.d.ts, 642, 31))
40+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/genericInferenceDefaultTypeParameterJsxReact.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
4+
// Repro from #50858
5+
6+
import React, { ComponentPropsWithRef, ElementType, ReactNode } from 'react';
7+
>React : typeof React
8+
>ComponentPropsWithRef : any
9+
>ElementType : any
10+
>ReactNode : any
11+
12+
type ButtonBaseProps<T extends ElementType> = ComponentPropsWithRef<T> & { children?: ReactNode };
13+
>ButtonBaseProps : ButtonBaseProps<T>
14+
>children : React.ReactNode
15+
16+
function Component<T extends ElementType = 'span'>(props: ButtonBaseProps<T>) {
17+
>Component : <T extends React.ElementType<any> = "span">(props: ButtonBaseProps<T>) => JSX.Element
18+
>props : ButtonBaseProps<T>
19+
20+
return <></>;
21+
><></> : JSX.Element
22+
}
23+
24+
const v1 = <Component onClick={e => e.preventDefault()} />;
25+
>v1 : JSX.Element
26+
><Component onClick={e => e.preventDefault()} /> : JSX.Element
27+
>Component : <T extends React.ElementType<any> = "span">(props: ButtonBaseProps<T>) => JSX.Element
28+
>onClick : (e: React.MouseEvent<HTMLSpanElement>) => void
29+
>e => e.preventDefault() : (e: React.MouseEvent<HTMLSpanElement>) => void
30+
>e : React.MouseEvent<HTMLSpanElement>
31+
>e.preventDefault() : void
32+
>e.preventDefault : () => void
33+
>e : React.MouseEvent<HTMLSpanElement>
34+
>preventDefault : () => void
35+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @strict: true
2+
3+
// Repro from #50858
4+
5+
type Type = {
6+
a: (e: string) => void;
7+
b: (e: number) => void;
8+
}
9+
10+
declare function f1<T extends keyof Type = "a">(props: Type[T]): void;
11+
12+
f1(event => { });
13+
f1<"a">(event => { });
14+
f1<"b">(event => { });
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// @strict: true
2+
// @esModuleInterop: true
3+
// @jsx: react
4+
5+
/// <reference path="/.lib/react16.d.ts" />
6+
7+
// Repro from #50858
8+
9+
import React, { ComponentPropsWithRef, ElementType, ReactNode } from 'react';
10+
11+
type ButtonBaseProps<T extends ElementType> = ComponentPropsWithRef<T> & { children?: ReactNode };
12+
13+
function Component<T extends ElementType = 'span'>(props: ButtonBaseProps<T>) {
14+
return <></>;
15+
}
16+
17+
const v1 = <Component onClick={e => e.preventDefault()} />;

0 commit comments

Comments
 (0)