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

Function getRestType

test/fixtures/snapshot/typescript.js:55732–55779  ·  view source on GitHub ↗
(source, properties, symbol)

Source from the content-addressed store, hash-verified

55730 return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false, checkMode);
55731 }
55732 function getRestType(source, properties, symbol) {
55733 source = filterType(source, function (t) { return !(t.flags & 98304 /* TypeFlags.Nullable */); });
55734 if (source.flags & 131072 /* TypeFlags.Never */) {
55735 return emptyObjectType;
55736 }
55737 if (source.flags & 1048576 /* TypeFlags.Union */) {
55738 return mapType(source, function (t) { return getRestType(t, properties, symbol); });
55739 }
55740 var omitKeyType = getUnionType(ts.map(properties, getLiteralTypeFromPropertyName));
55741 var spreadableProperties = [];
55742 var unspreadableToRestKeys = [];
55743 for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) {
55744 var prop = _a[_i];
55745 var literalTypeFromProperty = getLiteralTypeFromProperty(prop, 8576 /* TypeFlags.StringOrNumberLiteralOrUnique */);
55746 if (!isTypeAssignableTo(literalTypeFromProperty, omitKeyType)
55747 && !(ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 /* ModifierFlags.Private */ | 16 /* ModifierFlags.Protected */))
55748 && isSpreadableProperty(prop)) {
55749 spreadableProperties.push(prop);
55750 }
55751 else {
55752 unspreadableToRestKeys.push(literalTypeFromProperty);
55753 }
55754 }
55755 if (isGenericObjectType(source) || isGenericIndexType(omitKeyType)) {
55756 if (unspreadableToRestKeys.length) {
55757 // If the type we're spreading from has properties that cannot
55758 // be spread into the rest type (e.g. getters, methods), ensure
55759 // they are explicitly omitted, as they would in the non-generic case.
55760 omitKeyType = getUnionType(__spreadArray([omitKeyType], unspreadableToRestKeys, true));
55761 }
55762 if (omitKeyType.flags & 131072 /* TypeFlags.Never */) {
55763 return source;
55764 }
55765 var omitTypeAlias = getGlobalOmitSymbol();
55766 if (!omitTypeAlias) {
55767 return errorType;
55768 }
55769 return getTypeAliasInstantiation(omitTypeAlias, [source, omitKeyType]);
55770 }
55771 var members = ts.createSymbolTable();
55772 for (var _b = 0, spreadableProperties_1 = spreadableProperties; _b < spreadableProperties_1.length; _b++) {
55773 var prop = spreadableProperties_1[_b];
55774 members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
55775 }
55776 var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
55777 result.objectFlags |= 4194304 /* ObjectFlags.ObjectRestType */;
55778 return result;
55779 }
55780 function isGenericTypeWithUndefinedConstraint(type) {
55781 return !!(type.flags & 465829888 /* TypeFlags.Instantiable */) && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 32768 /* TypeFlags.Undefined */);
55782 }

Calls 15

filterTypeFunction · 0.85
mapTypeFunction · 0.85
getUnionTypeFunction · 0.85
getPropertiesOfTypeFunction · 0.85
isTypeAssignableToFunction · 0.85
isSpreadablePropertyFunction · 0.85
isGenericObjectTypeFunction · 0.85
isGenericIndexTypeFunction · 0.85
getGlobalOmitSymbolFunction · 0.85
getSpreadSymbolFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…