(type)
| 52832 | } |
| 52833 | } |
| 52834 | function createTypeNodeFromObjectType(type) { |
| 52835 | if (isGenericMappedType(type) || type.containsError) { |
| 52836 | return createMappedTypeNodeFromType(type); |
| 52837 | } |
| 52838 | var resolved = resolveStructuredTypeMembers(type); |
| 52839 | if (!resolved.properties.length && !resolved.indexInfos.length) { |
| 52840 | if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { |
| 52841 | context.approximateLength += 2; |
| 52842 | return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* EmitFlags.SingleLine */); |
| 52843 | } |
| 52844 | if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { |
| 52845 | var signature = resolved.callSignatures[0]; |
| 52846 | var signatureNode = signatureToSignatureDeclarationHelper(signature, 179 /* SyntaxKind.FunctionType */, context); |
| 52847 | return signatureNode; |
| 52848 | } |
| 52849 | if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { |
| 52850 | var signature = resolved.constructSignatures[0]; |
| 52851 | var signatureNode = signatureToSignatureDeclarationHelper(signature, 180 /* SyntaxKind.ConstructorType */, context); |
| 52852 | return signatureNode; |
| 52853 | } |
| 52854 | } |
| 52855 | var abstractSignatures = ts.filter(resolved.constructSignatures, function (signature) { return !!(signature.flags & 4 /* SignatureFlags.Abstract */); }); |
| 52856 | if (ts.some(abstractSignatures)) { |
| 52857 | var types = ts.map(abstractSignatures, getOrCreateTypeFromSignature); |
| 52858 | // count the number of type elements excluding abstract constructors |
| 52859 | var typeElementCount = resolved.callSignatures.length + |
| 52860 | (resolved.constructSignatures.length - abstractSignatures.length) + |
| 52861 | resolved.indexInfos.length + |
| 52862 | // exclude `prototype` when writing a class expression as a type literal, as per |
| 52863 | // the logic in `createTypeNodesFromResolvedType`. |
| 52864 | (context.flags & 2048 /* NodeBuilderFlags.WriteClassExpressionAsTypeLiteral */ ? |
| 52865 | ts.countWhere(resolved.properties, function (p) { return !(p.flags & 4194304 /* SymbolFlags.Prototype */); }) : |
| 52866 | ts.length(resolved.properties)); |
| 52867 | // don't include an empty object literal if there were no other static-side |
| 52868 | // properties to write, i.e. `abstract class C { }` becomes `abstract new () => {}` |
| 52869 | // and not `(abstract new () => {}) & {}` |
| 52870 | if (typeElementCount) { |
| 52871 | // create a copy of the object type without any abstract construct signatures. |
| 52872 | types.push(getResolvedTypeWithoutAbstractConstructSignatures(resolved)); |
| 52873 | } |
| 52874 | return typeToTypeNodeHelper(getIntersectionType(types), context); |
| 52875 | } |
| 52876 | var savedFlags = context.flags; |
| 52877 | context.flags |= 4194304 /* NodeBuilderFlags.InObjectTypeLiteral */; |
| 52878 | var members = createTypeNodesFromResolvedType(resolved); |
| 52879 | context.flags = savedFlags; |
| 52880 | var typeLiteralNode = ts.factory.createTypeLiteralNode(members); |
| 52881 | context.approximateLength += 2; |
| 52882 | ts.setEmitFlags(typeLiteralNode, (context.flags & 1024 /* NodeBuilderFlags.MultilineObjectLiterals */) ? 0 : 1 /* EmitFlags.SingleLine */); |
| 52883 | return typeLiteralNode; |
| 52884 | } |
| 52885 | function typeReferenceToTypeNode(type) { |
| 52886 | var typeArguments = getTypeArguments(type); |
| 52887 | if (type.target === globalArrayType || type.target === globalReadonlyArrayType) { |
no test coverage detected
searching dependent graphs…