(elementFlags, readonly, namedMemberDeclarations)
| 60910 | tupleTarget; |
| 60911 | } |
| 60912 | function getTupleTargetType(elementFlags, readonly, namedMemberDeclarations) { |
| 60913 | if (elementFlags.length === 1 && elementFlags[0] & 4 /* ElementFlags.Rest */) { |
| 60914 | // [...X[]] is equivalent to just X[] |
| 60915 | return readonly ? globalReadonlyArrayType : globalArrayType; |
| 60916 | } |
| 60917 | var key = ts.map(elementFlags, function (f) { return f & 1 /* ElementFlags.Required */ ? "#" : f & 2 /* ElementFlags.Optional */ ? "?" : f & 4 /* ElementFlags.Rest */ ? "." : "*"; }).join() + |
| 60918 | (readonly ? "R" : "") + |
| 60919 | (namedMemberDeclarations && namedMemberDeclarations.length ? "," + ts.map(namedMemberDeclarations, getNodeId).join(",") : ""); |
| 60920 | var type = tupleTypes.get(key); |
| 60921 | if (!type) { |
| 60922 | tupleTypes.set(key, type = createTupleTargetType(elementFlags, readonly, namedMemberDeclarations)); |
| 60923 | } |
| 60924 | return type; |
| 60925 | } |
| 60926 | // We represent tuple types as type references to synthesized generic interface types created by |
| 60927 | // this function. The types are of the form: |
| 60928 | // |
no test coverage detected
searching dependent graphs…