diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 2bb112d6c43..6bd07c2fb8a 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -6649,7 +6649,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);
@@ -6668,7 +6668,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.
@@ -6690,9 +6690,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 c4afb444155..a35d556b85c 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");