(node)
| 80715 | checkSourceElement(node.elementType); |
| 80716 | } |
| 80717 | function checkTupleType(node) { |
| 80718 | var elementTypes = node.elements; |
| 80719 | var seenOptionalElement = false; |
| 80720 | var seenRestElement = false; |
| 80721 | var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember); |
| 80722 | for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) { |
| 80723 | var e = elementTypes_1[_i]; |
| 80724 | if (e.kind !== 197 /* SyntaxKind.NamedTupleMember */ && hasNamedElement) { |
| 80725 | grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names); |
| 80726 | break; |
| 80727 | } |
| 80728 | var flags = getTupleElementFlags(e); |
| 80729 | if (flags & 8 /* ElementFlags.Variadic */) { |
| 80730 | var type = getTypeFromTypeNode(e.type); |
| 80731 | if (!isArrayLikeType(type)) { |
| 80732 | error(e, ts.Diagnostics.A_rest_element_type_must_be_an_array_type); |
| 80733 | break; |
| 80734 | } |
| 80735 | if (isArrayType(type) || isTupleType(type) && type.target.combinedFlags & 4 /* ElementFlags.Rest */) { |
| 80736 | seenRestElement = true; |
| 80737 | } |
| 80738 | } |
| 80739 | else if (flags & 4 /* ElementFlags.Rest */) { |
| 80740 | if (seenRestElement) { |
| 80741 | grammarErrorOnNode(e, ts.Diagnostics.A_rest_element_cannot_follow_another_rest_element); |
| 80742 | break; |
| 80743 | } |
| 80744 | seenRestElement = true; |
| 80745 | } |
| 80746 | else if (flags & 2 /* ElementFlags.Optional */) { |
| 80747 | if (seenRestElement) { |
| 80748 | grammarErrorOnNode(e, ts.Diagnostics.An_optional_element_cannot_follow_a_rest_element); |
| 80749 | break; |
| 80750 | } |
| 80751 | seenOptionalElement = true; |
| 80752 | } |
| 80753 | else if (seenOptionalElement) { |
| 80754 | grammarErrorOnNode(e, ts.Diagnostics.A_required_element_cannot_follow_an_optional_element); |
| 80755 | break; |
| 80756 | } |
| 80757 | } |
| 80758 | ts.forEach(node.elements, checkSourceElement); |
| 80759 | getTypeFromTypeNode(node); |
| 80760 | } |
| 80761 | function checkUnionOrIntersectionType(node) { |
| 80762 | ts.forEach(node.types, checkSourceElement); |
| 80763 | getTypeFromTypeNode(node); |
no test coverage detected