(symbol)
| 58605 | } |
| 58606 | } |
| 58607 | function getTypeOfMappedSymbol(symbol) { |
| 58608 | if (!symbol.type) { |
| 58609 | var mappedType = symbol.mappedType; |
| 58610 | if (!pushTypeResolution(symbol, 0 /* TypeSystemPropertyName.Type */)) { |
| 58611 | mappedType.containsError = true; |
| 58612 | return errorType; |
| 58613 | } |
| 58614 | var templateType = getTemplateTypeFromMappedType(mappedType.target || mappedType); |
| 58615 | var mapper = appendTypeMapping(mappedType.mapper, getTypeParameterFromMappedType(mappedType), symbol.keyType); |
| 58616 | var propType = instantiateType(templateType, mapper); |
| 58617 | // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the |
| 58618 | // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks |
| 58619 | // mode, if the underlying property is optional we remove 'undefined' from the type. |
| 58620 | var type = strictNullChecks && symbol.flags & 16777216 /* SymbolFlags.Optional */ && !maybeTypeOfKind(propType, 32768 /* TypeFlags.Undefined */ | 16384 /* TypeFlags.Void */) ? getOptionalType(propType, /*isProperty*/ true) : |
| 58621 | symbol.checkFlags & 524288 /* CheckFlags.StripOptional */ ? removeMissingOrUndefinedType(propType) : |
| 58622 | propType; |
| 58623 | if (!popTypeResolution()) { |
| 58624 | error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType)); |
| 58625 | type = errorType; |
| 58626 | } |
| 58627 | symbol.type = type; |
| 58628 | } |
| 58629 | return symbol.type; |
| 58630 | } |
| 58631 | function getTypeParameterFromMappedType(type) { |
| 58632 | return type.typeParameter || |
| 58633 | (type.typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(type.declaration.typeParameter))); |
no test coverage detected