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/index.tsx ===
namespace JSX {
export interface Element {}
}
type Props<T> = PropsBase<string> | PropsWithConvert<T>;
>Props : Props<T>
interface PropsBase<T> {
data: T;
>data : T
}
interface PropsWithConvert<T> extends PropsBase<T> {
convert: (t: T) => string;
>convert : (t: T) => string
>t : T
}
function ShouldInferFromData<T>(props: Props<T>): JSX.Element {
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>props : Props<T>
>JSX : any
return <div />;
><div /> : JSX.Element
>div : any
}
// Sanity check: function call equivalent versions work fine
ShouldInferFromData({ data: "1" });
>ShouldInferFromData({ data: "1" }) : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>{ data: "1" } : { data: string; }
>data : string
>"1" : "1"
ShouldInferFromData({ data: "1", convert: n => "" + n });
>ShouldInferFromData({ data: "1", convert: n => "" + n }) : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>{ data: "1", convert: n => "" + n } : { data: string; convert: (n: string) => string; }
>data : string
>"1" : "1"
>convert : (n: string) => string
>n => "" + n : (n: string) => string
>n : string
>"" + n : string
>"" : ""
>n : string
ShouldInferFromData({ data: 2, convert: n => "" + n });
>ShouldInferFromData({ data: 2, convert: n => "" + n }) : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>{ data: 2, convert: n => "" + n } : { data: number; convert: (n: number) => string; }
>data : number
>2 : 2
>convert : (n: number) => string
>n => "" + n : (n: number) => string
>n : number
>"" + n : string
>"" : ""
>n : number
const f1 = <ShouldInferFromData data={"1"} />;
>f1 : JSX.Element
><ShouldInferFromData data={"1"} /> : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>data : string
>"1" : "1"
const f2 = <ShouldInferFromData data={"1"} convert={n => "" + n} />;
>f2 : JSX.Element
><ShouldInferFromData data={"1"} convert={n => "" + n} /> : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>data : string
>"1" : "1"
>convert : (n: string) => string
>n => "" + n : (n: string) => string
>n : string
>"" + n : string
>"" : ""
>n : string
const f3 = <ShouldInferFromData data={2} convert={n => "" + n} />;
>f3 : JSX.Element
><ShouldInferFromData data={2} convert={n => "" + n} /> : JSX.Element
>ShouldInferFromData : <T>(props: Props<T>) => JSX.Element
>data : number
>2 : 2
>convert : (n: number) => string
>n => "" + n : (n: number) => string
>n : number
>"" + n : string
>"" : ""
>n : number
|