(source, properties, symbol)
| 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 | } |
no test coverage detected
searching dependent graphs…