diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f2c1c71eb6..e81bbbadc5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6666,7 +6666,7 @@ namespace ts { if (isMappedTypeWithKeyofConstraintDeclaration(type)) { // We have a { [P in keyof T]: X } for (const prop of getPropertiesOfType(modifiersType)) { - addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include), /*_index*/ undefined, prop); + addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include)); } if (modifiersType.flags & TypeFlags.Any || getIndexInfoOfType(modifiersType, IndexKind.String)) { addMemberForKeyType(stringType); @@ -6685,7 +6685,7 @@ namespace ts { } setStructuredTypeMembers(type, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); - function addMemberForKeyType(t: Type, _index?: number, origin?: Symbol) { + function addMemberForKeyType(t: Type) { // Create a mapper from T to the current iteration type constituent. Then, if the // mapped type is itself an instantiated type, combine the iteration mapper with the // instantiation mapper. @@ -6707,9 +6707,9 @@ namespace ts { prop.type = strictNullChecks && isOptional && !isTypeAssignableTo(undefinedType, propType) ? getOptionalType(propType) : strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & SymbolFlags.Optional ? getTypeWithFacts(propType, TypeFacts.NEUndefined) : propType; - if (origin) { - prop.syntheticOrigin = origin; - prop.declarations = origin.declarations; + if (modifiersProp) { + prop.syntheticOrigin = modifiersProp; + prop.declarations = modifiersProp.declarations; } prop.nameType = t; members.set(propName, prop); diff --git a/tests/cases/fourslash/quickInfoMappedType.ts b/tests/cases/fourslash/quickInfoMappedType.ts index c4afb44415..a35d556b85 100644 --- a/tests/cases/fourslash/quickInfoMappedType.ts +++ b/tests/cases/fourslash/quickInfoMappedType.ts @@ -1,11 +1,17 @@ /// -////interface I { m(): void; } +////interface I { +//// /** m documentation */ m(): void; +////} ////declare const o: { [K in keyof I]: number }; ////o.m/*0*/; //// ////declare const p: { [K in keyof I]: I[K] }; ////p.m/*1*/; +//// +////declare const q: Pick; +////q.m/*2*/; -verify.quickInfoAt("0", "(property) m: number"); -verify.quickInfoAt("1", "(method) m(): void"); +verify.quickInfoAt("0", "(property) m: number", "m documentation"); +verify.quickInfoAt("1", "(method) m(): void", "m documentation"); +verify.quickInfoAt("2", "(method) m(): void", "m documentation");