MCPcopy Create free account
hub / github.com/microsoft/typescript-go / checkTupleType

Method checkTupleType

internal/checker/checker.go:3219–3254  ·  view source on GitHub ↗
(node *ast.Node)

Source from the content-addressed store, hash-verified

3217}
3218
3219func (c *Checker) checkTupleType(node *ast.Node) {
3220 seenOptionalElement := false
3221 seenRestElement := false
3222 elements := node.Elements()
3223 for _, e := range elements {
3224 flags := c.getTupleElementFlags(e)
3225 if flags&ElementFlagsVariadic != 0 {
3226 t := c.getTypeFromTypeNode(e.Type())
3227 if !c.isArrayLikeType(t) {
3228 c.error(e, diagnostics.A_rest_element_type_must_be_an_array_type)
3229 break
3230 }
3231 if c.isArrayType(t) || isTupleType(t) && t.TargetTupleType().combinedFlags&ElementFlagsRest != 0 {
3232 flags |= ElementFlagsRest
3233 }
3234 }
3235 if flags&ElementFlagsRest != 0 {
3236 if seenRestElement {
3237 c.grammarErrorOnNode(e, diagnostics.A_rest_element_cannot_follow_another_rest_element)
3238 break
3239 }
3240 seenRestElement = true
3241 } else if flags&ElementFlagsOptional != 0 {
3242 if seenRestElement {
3243 c.grammarErrorOnNode(e, diagnostics.An_optional_element_cannot_follow_a_rest_element)
3244 break
3245 }
3246 seenOptionalElement = true
3247 } else if flags&ElementFlagsRequired != 0 && seenOptionalElement {
3248 c.grammarErrorOnNode(e, diagnostics.A_required_element_cannot_follow_an_optional_element)
3249 break
3250 }
3251 }
3252 c.checkSourceElements(elements)
3253 c.getTypeFromTypeNode(node)
3254}
3255
3256func (c *Checker) checkUnionOrIntersectionType(node *ast.Node) {
3257 node.ForEachChild(c.checkSourceElement)

Callers 1

Calls 11

getTupleElementFlagsMethod · 0.95
getTypeFromTypeNodeMethod · 0.95
isArrayLikeTypeMethod · 0.95
errorMethod · 0.95
isArrayTypeMethod · 0.95
grammarErrorOnNodeMethod · 0.95
checkSourceElementsMethod · 0.95
TargetTupleTypeMethod · 0.80
isTupleTypeFunction · 0.70
ElementsMethod · 0.45
TypeMethod · 0.45

Tested by

no test coverage detected