(tupleType, mappedType, typeVariable, mapper)
| 63539 | return modifiers & 1 /* MappedTypeModifiers.IncludeReadonly */ ? true : modifiers & 2 /* MappedTypeModifiers.ExcludeReadonly */ ? false : state; |
| 63540 | } |
| 63541 | function instantiateMappedGenericTupleType(tupleType, mappedType, typeVariable, mapper) { |
| 63542 | // When a tuple type is generic (i.e. when it contains variadic elements), we want to eagerly map the |
| 63543 | // non-generic elements and defer mapping the generic elements. In order to facilitate this, we transform |
| 63544 | // M<[A, B?, ...T, ...C[]] into [...M<[A]>, ...M<[B?]>, ...M<T>, ...M<C[]>] and then rely on tuple type |
| 63545 | // normalization to resolve the non-generic parts of the resulting tuple. |
| 63546 | var elementFlags = tupleType.target.elementFlags; |
| 63547 | var elementTypes = ts.map(getTypeArguments(tupleType), function (t, i) { |
| 63548 | var singleton = elementFlags[i] & 8 /* ElementFlags.Variadic */ ? t : |
| 63549 | elementFlags[i] & 4 /* ElementFlags.Rest */ ? createArrayType(t) : |
| 63550 | createTupleType([t], [elementFlags[i]]); |
| 63551 | // The singleton is never a generic tuple type, so it is safe to recurse here. |
| 63552 | return instantiateMappedType(mappedType, prependTypeMapping(typeVariable, singleton, mapper)); |
| 63553 | }); |
| 63554 | var newReadonly = getModifiedReadonlyState(tupleType.target.readonly, getMappedTypeModifiers(mappedType)); |
| 63555 | return createTupleType(elementTypes, ts.map(elementTypes, function (_) { return 8 /* ElementFlags.Variadic */; }), newReadonly); |
| 63556 | } |
| 63557 | function instantiateMappedArrayType(arrayType, mappedType, mapper) { |
| 63558 | var elementType = instantiateMappedTypeTemplate(mappedType, numberType, /*isOptional*/ true, mapper); |
| 63559 | return isErrorType(elementType) ? errorType : |
no test coverage detected