/// //@Filename: file.tsx // @jsx: preserve // @noLib: true //// declare function OverloadComponent(attr: {b: U, a?: string, "ignore-prop": boolean}): JSX.Element; //// declare function OverloadComponent(attr: {b: U, a: T}): JSX.Element; //// declare function OverloadComponent(): JSX.Element; // effective argument type of `{}`, needs to be last //// function Baz(arg1: T, arg2: U) { //// let a0 = ; //// let a1 = ; //// let a2 = ; //// let a3 = ; //// let a4 = ; //// let a5 = ; //// let a6 = ; //// } verify.quickInfos({ 1: "function OverloadComponent(attr: {\n b: number;\n a?: string;\n \"ignore-prop\": boolean;\n}): any (+2 overloads)", 2: "function OverloadComponent(attr: {\n b: string;\n a: boolean;\n}): any (+2 overloads)", 3: "function OverloadComponent(attr: {\n b: string;\n a: boolean;\n}): any (+2 overloads)", 4: "function OverloadComponent(): any (+2 overloads)", // Subtype pass chooses this overload, since `a` is missing from the top overload, and `ignore-prop` is missing from the second (while T & {ignore-prop: true} is a proper subtype of `{}`) 5: "function OverloadComponent(): any (+2 overloads)", 6: "function OverloadComponent(attr: {\n b: never;\n a: boolean;\n}): any (+2 overloads)", 7: "function OverloadComponent(attr: {\n b: never;\n a: boolean;\n}): any (+2 overloads)", });