diff --git a/tests/baselines/reference/isomorphicMappedTypeInference.js b/tests/baselines/reference/isomorphicMappedTypeInference.js index 9c4e8c9e9f1..d749e71c534 100644 --- a/tests/baselines/reference/isomorphicMappedTypeInference.js +++ b/tests/baselines/reference/isomorphicMappedTypeInference.js @@ -310,17 +310,11 @@ declare type Spec = { */ declare function applySpec(obj: Spec): (...args: any[]) => T; declare var g1: (...args: any[]) => { - sum: number; - nested: { - mul: string; - }; + sum: {}; + nested: {}; }; declare var g2: (...args: any[]) => { - foo: { - bar: { - baz: boolean; - }; - }; + foo: {}; }; declare const foo: (object: T, partial: Partial) => T; declare let o: { diff --git a/tests/baselines/reference/keyofAndIndexedAccess.js b/tests/baselines/reference/keyofAndIndexedAccess.js index 530a2b8bbf3..bd9e1a44bfe 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.js +++ b/tests/baselines/reference/keyofAndIndexedAccess.js @@ -1105,7 +1105,7 @@ declare var hashOfEmpty1: { test: {}; }; declare var hashOfEmpty2: { - test: boolean; + test: {}; }; interface Options1 { data?: Data; diff --git a/tests/baselines/reference/thisTypeInObjectLiterals2.js b/tests/baselines/reference/thisTypeInObjectLiterals2.js index ca62ee37665..d614f0fa74c 100644 --- a/tests/baselines/reference/thisTypeInObjectLiterals2.js +++ b/tests/baselines/reference/thisTypeInObjectLiterals2.js @@ -462,8 +462,8 @@ declare function defineProps(obj: T, descs: PropDescMap & ThisType): declare let p10: Point & Record<"foo", number>; declare let p11: Point & Record<"bar", number>; declare let p12: Point & { - foo: number; - bar: number; + foo: {}; + bar: {}; }; declare type Accessors = { [K in keyof T]: (() => T[K]) | Computed; @@ -487,6 +487,6 @@ declare let vue: { } & { f(x: string): number; } & { - test: number; - hello: string; + test: {}; + hello: {}; }; diff --git a/tests/cases/fourslash/completionEntryForDeferredMappedTypeMembers.ts b/tests/cases/fourslash/completionEntryForDeferredMappedTypeMembers.ts new file mode 100644 index 00000000000..785ac32ee39 --- /dev/null +++ b/tests/cases/fourslash/completionEntryForDeferredMappedTypeMembers.ts @@ -0,0 +1,17 @@ +/// +// @Filename: test.ts +//// interface A { a: A } +//// declare let a: A; +//// type Deep = { [K in keyof T]: Deep } +//// declare function foo(deep: Deep): T; +//// const out = foo(a); +//// out./*1*/a +//// out.a./*2*/a +//// out.a.a./*3*/a + +goTo.marker('1'); +verify.completionListCount(1); +goTo.marker('2'); +verify.completionListCount(1); +goTo.marker('3'); +verify.completionListCount(1); diff --git a/tests/cases/fourslash/quickInfoMappedTypeRecursiveInference.ts b/tests/cases/fourslash/quickInfoMappedTypeRecursiveInference.ts new file mode 100644 index 00000000000..84fd9da4ebe --- /dev/null +++ b/tests/cases/fourslash/quickInfoMappedTypeRecursiveInference.ts @@ -0,0 +1,56 @@ +/// +// @Filename: test.ts +//// interface A { a: A } +//// declare let a: A; +//// type Deep = { [K in keyof T]: Deep } +//// declare function foo(deep: Deep): T; +//// const out/*1*/ = foo/*2*/(a); +//// out.a/*3*/ +//// out.a.a/*4*/ +//// out.a.a.a.a.a.a.a/*5*/ +//// +//// interface B { [s: string]: B } +//// declare let b: B; +//// const oub/*6*/ = foo/*7*/(b); +//// oub.b/*8*/ +//// oub.b.b/*9*/ +//// oub.b.a.n.a.n.a/*10*/ + +verify.quickInfoAt('1', `const out: { + a: {}; +}`); +verify.quickInfoAt('2', `function foo<{ + a: {}; +}>(deep: Deep<{ + a: {}; +}>): { + a: {}; +}`); +verify.quickInfoAt('3', `(property) a: { + a: {}; +}`); +verify.quickInfoAt('4', `(property) a: { + a: {}; +}`); +verify.quickInfoAt('5', `(property) a: { + a: {}; +}`); +verify.quickInfoAt('6', `const oub: { + [x: string]: {}; +}`); +verify.quickInfoAt('7', `function foo<{ + [x: string]: {}; +}>(deep: Deep<{ + [x: string]: {}; +}>): { + [x: string]: {}; +}`); +verify.quickInfoAt('8', `{ + [x: string]: {}; +}`); +verify.quickInfoAt('9', `{ + [x: string]: {}; +}`); +verify.quickInfoAt('10', `{ + [x: string]: {}; +}`);