nl_tokens: Given an opening / self - closing element get the element attributes type i . e . the type that tells us which attributes are valid on a given element .
pl_tokens: function getJsxElementAttributesType ( node ) { var links = getNodeLinks ( node ) ; if ( ! links . resolvedJsxType ) { var sym = getJsxElementTagSymbol ( node ) ; if ( links . jsxFlags & 4 /* ClassElement */ ) { var elemInstanceType = getJsxElementInstanceType ( <mask> ) ; if ( isTypeAny ( elemInstanceType ) ) { return links . resolvedJsxType = elemInstanceType ; } var propsName = getJsxElementPropertiesName ( ) ; if ( propsName === undefined ) { // There is no type ElementAttributesProperty, return 'any' return links . resolvedJsxType = anyType ; } else if ( propsName === "" ) { // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead return links . resolvedJsxType = elemInstanceType ; } else { var attributesType = getTypeOfPropertyOfType ( elemInstanceType , propsName ) ; if ( ! attributesType ) { // There is no property named 'props' on this instance type return links . resolvedJsxType = emptyObjectType ; } else if ( isTypeAny ( attributesType ) || ( attributesType === unknownType ) ) { return links . resolvedJsxType = attributesType ; } else if ( ! ( attributesType . flags & 80896 /* ObjectType */ ) ) { error ( node . tagName , ts . Diagnostics . JSX_element_attributes_type_0_must_be_an_object_type , typeToString ( attributesType ) ) ; return links . resolvedJsxType = anyType ; } else { return links . resolvedJsxType = attributesType ; } } } else if ( links . jsxFlags & 1 /* IntrinsicNamedElement */ ) { return links . resolvedJsxType = getTypeOfSymbol ( sym ) ; } else if ( links . jsxFlags & 2 /* IntrinsicIndexedElement */ ) { return links . resolvedJsxType = getIndexTypeOfSymbol ( sym , 0 /* String */ ) ; } else { // Resolution failed, so we don't know return links . resolvedJsxType = anyType ; } } return links . resolvedJsxType ; }