(type)
| 67420 | return isArrayType(type) || !(type.flags & 98304 /* TypeFlags.Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType); |
| 67421 | } |
| 67422 | function getSingleBaseForNonAugmentingSubtype(type) { |
| 67423 | if (!(ts.getObjectFlags(type) & 4 /* ObjectFlags.Reference */) || !(ts.getObjectFlags(type.target) & 3 /* ObjectFlags.ClassOrInterface */)) { |
| 67424 | return undefined; |
| 67425 | } |
| 67426 | if (ts.getObjectFlags(type) & 33554432 /* ObjectFlags.IdenticalBaseTypeCalculated */) { |
| 67427 | return ts.getObjectFlags(type) & 67108864 /* ObjectFlags.IdenticalBaseTypeExists */ ? type.cachedEquivalentBaseType : undefined; |
| 67428 | } |
| 67429 | type.objectFlags |= 33554432 /* ObjectFlags.IdenticalBaseTypeCalculated */; |
| 67430 | var target = type.target; |
| 67431 | if (ts.getObjectFlags(target) & 1 /* ObjectFlags.Class */) { |
| 67432 | var baseTypeNode = getBaseTypeNodeOfClass(target); |
| 67433 | // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only |
| 67434 | // check for base types specified as simple qualified names. |
| 67435 | if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* SyntaxKind.Identifier */ && baseTypeNode.expression.kind !== 206 /* SyntaxKind.PropertyAccessExpression */) { |
| 67436 | return undefined; |
| 67437 | } |
| 67438 | } |
| 67439 | var bases = getBaseTypes(target); |
| 67440 | if (bases.length !== 1) { |
| 67441 | return undefined; |
| 67442 | } |
| 67443 | if (getMembersOfSymbol(type.symbol).size) { |
| 67444 | return undefined; // If the interface has any members, they may subtype members in the base, so we should do a full structural comparison |
| 67445 | } |
| 67446 | var instantiatedBase = !ts.length(target.typeParameters) ? bases[0] : instantiateType(bases[0], createTypeMapper(target.typeParameters, getTypeArguments(type).slice(0, target.typeParameters.length))); |
| 67447 | if (ts.length(getTypeArguments(type)) > ts.length(target.typeParameters)) { |
| 67448 | instantiatedBase = getTypeWithThisArgument(instantiatedBase, ts.last(getTypeArguments(type))); |
| 67449 | } |
| 67450 | type.objectFlags |= 67108864 /* ObjectFlags.IdenticalBaseTypeExists */; |
| 67451 | return type.cachedEquivalentBaseType = instantiatedBase; |
| 67452 | } |
| 67453 | function isEmptyLiteralType(type) { |
| 67454 | return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType; |
| 67455 | } |
no test coverage detected
searching dependent graphs…