(elementFlags, readonly, namedMemberDeclarations)
| 60931 | // Note that the generic type created by this function has no symbol associated with it. The same |
| 60932 | // is true for each of the synthesized type parameters. |
| 60933 | function createTupleTargetType(elementFlags, readonly, namedMemberDeclarations) { |
| 60934 | var arity = elementFlags.length; |
| 60935 | var minLength = ts.countWhere(elementFlags, function (f) { return !!(f & (1 /* ElementFlags.Required */ | 8 /* ElementFlags.Variadic */)); }); |
| 60936 | var typeParameters; |
| 60937 | var properties = []; |
| 60938 | var combinedFlags = 0; |
| 60939 | if (arity) { |
| 60940 | typeParameters = new Array(arity); |
| 60941 | for (var i = 0; i < arity; i++) { |
| 60942 | var typeParameter = typeParameters[i] = createTypeParameter(); |
| 60943 | var flags = elementFlags[i]; |
| 60944 | combinedFlags |= flags; |
| 60945 | if (!(combinedFlags & 12 /* ElementFlags.Variable */)) { |
| 60946 | var property = createSymbol(4 /* SymbolFlags.Property */ | (flags & 2 /* ElementFlags.Optional */ ? 16777216 /* SymbolFlags.Optional */ : 0), "" + i, readonly ? 8 /* CheckFlags.Readonly */ : 0); |
| 60947 | property.tupleLabelDeclaration = namedMemberDeclarations === null || namedMemberDeclarations === void 0 ? void 0 : namedMemberDeclarations[i]; |
| 60948 | property.type = typeParameter; |
| 60949 | properties.push(property); |
| 60950 | } |
| 60951 | } |
| 60952 | } |
| 60953 | var fixedLength = properties.length; |
| 60954 | var lengthSymbol = createSymbol(4 /* SymbolFlags.Property */, "length", readonly ? 8 /* CheckFlags.Readonly */ : 0); |
| 60955 | if (combinedFlags & 12 /* ElementFlags.Variable */) { |
| 60956 | lengthSymbol.type = numberType; |
| 60957 | } |
| 60958 | else { |
| 60959 | var literalTypes = []; |
| 60960 | for (var i = minLength; i <= arity; i++) |
| 60961 | literalTypes.push(getNumberLiteralType(i)); |
| 60962 | lengthSymbol.type = getUnionType(literalTypes); |
| 60963 | } |
| 60964 | properties.push(lengthSymbol); |
| 60965 | var type = createObjectType(8 /* ObjectFlags.Tuple */ | 4 /* ObjectFlags.Reference */); |
| 60966 | type.typeParameters = typeParameters; |
| 60967 | type.outerTypeParameters = undefined; |
| 60968 | type.localTypeParameters = typeParameters; |
| 60969 | type.instantiations = new ts.Map(); |
| 60970 | type.instantiations.set(getTypeListId(type.typeParameters), type); |
| 60971 | type.target = type; |
| 60972 | type.resolvedTypeArguments = type.typeParameters; |
| 60973 | type.thisType = createTypeParameter(); |
| 60974 | type.thisType.isThisType = true; |
| 60975 | type.thisType.constraint = type; |
| 60976 | type.declaredProperties = properties; |
| 60977 | type.declaredCallSignatures = ts.emptyArray; |
| 60978 | type.declaredConstructSignatures = ts.emptyArray; |
| 60979 | type.declaredIndexInfos = ts.emptyArray; |
| 60980 | type.elementFlags = elementFlags; |
| 60981 | type.minLength = minLength; |
| 60982 | type.fixedLength = fixedLength; |
| 60983 | type.hasRestElement = !!(combinedFlags & 12 /* ElementFlags.Variable */); |
| 60984 | type.combinedFlags = combinedFlags; |
| 60985 | type.readonly = readonly; |
| 60986 | type.labeledElementDeclarations = namedMemberDeclarations; |
| 60987 | return type; |
| 60988 | } |
| 60989 | function createNormalizedTypeReference(target, typeArguments) { |
| 60990 | return target.objectFlags & 8 /* ObjectFlags.Tuple */ ? createNormalizedTupleType(target, typeArguments) : createTypeReference(target, typeArguments); |
no test coverage detected
searching dependent graphs…