MCPcopy Index your code
hub / github.com/nodejs/node / resolveReverseMappedTypeMembers

Function resolveReverseMappedTypeMembers

test/fixtures/snapshot/typescript.js:58457–58489  ·  view source on GitHub ↗
(type)

Source from the content-addressed store, hash-verified

58455 return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
58456 }
58457 function resolveReverseMappedTypeMembers(type) {
58458 var indexInfo = getIndexInfoOfType(type.source, stringType);
58459 var modifiers = getMappedTypeModifiers(type.mappedType);
58460 var readonlyMask = modifiers & 1 /* MappedTypeModifiers.IncludeReadonly */ ? false : true;
58461 var optionalMask = modifiers & 4 /* MappedTypeModifiers.IncludeOptional */ ? 0 : 16777216 /* SymbolFlags.Optional */;
58462 var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
58463 var members = ts.createSymbolTable();
58464 for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
58465 var prop = _a[_i];
58466 var checkFlags = 8192 /* CheckFlags.ReverseMapped */ | (readonlyMask && isReadonlySymbol(prop) ? 8 /* CheckFlags.Readonly */ : 0);
58467 var inferredProp = createSymbol(4 /* SymbolFlags.Property */ | prop.flags & optionalMask, prop.escapedName, checkFlags);
58468 inferredProp.declarations = prop.declarations;
58469 inferredProp.nameType = getSymbolLinks(prop).nameType;
58470 inferredProp.propertyType = getTypeOfSymbol(prop);
58471 if (type.constraintType.type.flags & 8388608 /* TypeFlags.IndexedAccess */
58472 && type.constraintType.type.objectType.flags & 262144 /* TypeFlags.TypeParameter */
58473 && type.constraintType.type.indexType.flags & 262144 /* TypeFlags.TypeParameter */) {
58474 // A reverse mapping of `{[K in keyof T[K_1]]: T[K_1]}` is the same as that of `{[K in keyof T]: T}`, since all we care about is
58475 // inferring to the "type parameter" (or indexed access) shared by the constraint and template. So, to reduce the number of
58476 // type identities produced, we simplify such indexed access occurences
58477 var newTypeParam = type.constraintType.type.objectType;
58478 var newMappedType = replaceIndexedAccess(type.mappedType, type.constraintType.type, newTypeParam);
58479 inferredProp.mappedType = newMappedType;
58480 inferredProp.constraintType = getIndexType(newTypeParam);
58481 }
58482 else {
58483 inferredProp.mappedType = type.mappedType;
58484 inferredProp.constraintType = type.constraintType;
58485 }
58486 members.set(prop.escapedName, inferredProp);
58487 }
58488 setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
58489 }
58490 // Return the lower bound of the key type in a mapped type. Intuitively, the lower
58491 // bound includes those keys that are known to always be present, for example because
58492 // because of constraints on type parameters (e.g. 'keyof T' for a constrained T).

Callers 1

Calls 13

getIndexInfoOfTypeFunction · 0.85
getMappedTypeModifiersFunction · 0.85
createIndexInfoFunction · 0.85
inferReverseMappedTypeFunction · 0.85
getPropertiesOfTypeFunction · 0.85
isReadonlySymbolFunction · 0.85
createSymbolFunction · 0.85
getSymbolLinksFunction · 0.85
getTypeOfSymbolFunction · 0.85
replaceIndexedAccessFunction · 0.85
getIndexTypeFunction · 0.85
setStructuredTypeMembersFunction · 0.85

Tested by

no test coverage detected