diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 50cf05bad96..1b2057f89e9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1,4 +1,3 @@ -import * as ts from "./_namespaces/ts"; import { __String, AccessExpression, @@ -387,6 +386,7 @@ import { hasStaticModifier, hasSyntacticModifier, hasSyntacticModifiers, + hasType, HeritageClause, Identifier, identifierToKeywordKind, @@ -1816,6 +1816,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { getTypeOnlyAliasDeclaration, getMemberOverrideModifierStatus, isTypeParameterPossiblyReferenced, + typeHasCallOrConstructSignatures, }; function runWithoutResolvedSignatureCaching(node: Node | undefined, fn: () => T): T { @@ -10069,7 +10070,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { function findResolutionCycleStartIndex(target: TypeSystemEntity, propertyName: TypeSystemPropertyName): number { for (let i = resolutionTargets.length - 1; i >= 0; i--) { - if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) { + if (resolutionTargetHasProperty(resolutionTargets[i], resolutionPropertyNames[i])) { return -1; } if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) { @@ -10079,7 +10080,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return -1; } - function hasType(target: TypeSystemEntity, propertyName: TypeSystemPropertyName): boolean { + function resolutionTargetHasProperty(target: TypeSystemEntity, propertyName: TypeSystemPropertyName): boolean { switch (propertyName) { case TypeSystemPropertyName.Type: return !!getSymbolLinks(target as Symbol).type; @@ -19260,7 +19261,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return false; } // Or functions with annotated parameter types - if (some(node.parameters, ts.hasType)) { + if (some(node.parameters, hasType)) { return false; } const sourceSig = getSingleCallSignature(source); @@ -45567,7 +45568,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function typeHasCallOrConstructSignatures(type: Type): boolean { - return ts.typeHasCallOrConstructSignatures(type, checker); + return getSignaturesOfType(type, SignatureKind.Call).length !== 0 || getSignaturesOfType(type, SignatureKind.Construct).length !== 0; } function getRootSymbols(symbol: Symbol): readonly Symbol[] { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0d1a1861cc4..df0ba774ae5 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -5240,6 +5240,7 @@ export interface TypeChecker { /** @internal */ getTypeOnlyAliasDeclaration(symbol: Symbol): TypeOnlyAliasDeclaration | undefined; /** @internal */ getMemberOverrideModifierStatus(node: ClassLikeDeclaration, member: ClassElement, memberSymbol: Symbol): MemberOverrideStatus; /** @internal */ isTypeParameterPossiblyReferenced(tp: TypeParameter, node: Node): boolean; + /** @internal */ typeHasCallOrConstructSignatures(type: Type): boolean; } /** @internal */ diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 74a2ad7f2dd..8dbce5394f8 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -464,7 +464,6 @@ import { Signature, SignatureDeclaration, SignatureFlags, - SignatureKind, singleElementArray, singleOrUndefined, skipOuterExpressions, @@ -7645,11 +7644,6 @@ export function getObjectFlags(type: Type): ObjectFlags { return type.flags & TypeFlags.ObjectFlagsType ? (type as ObjectFlagsType).objectFlags : 0; } -/** @internal */ -export function typeHasCallOrConstructSignatures(type: Type, checker: TypeChecker) { - return checker.getSignaturesOfType(type, SignatureKind.Call).length !== 0 || checker.getSignaturesOfType(type, SignatureKind.Construct).length !== 0; -} - /** @internal */ export function forSomeAncestorDirectory(directory: string, callback: (directory: string) => boolean): boolean { return !!forEachAncestorDirectory(directory, d => callback(d) ? true : undefined); diff --git a/src/services/completions.ts b/src/services/completions.ts index 88c639f58d8..5005639f889 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -347,7 +347,6 @@ import { TypeChecker, TypeElement, TypeFlags, - typeHasCallOrConstructSignatures, TypeLiteralNode, TypeNode, TypeOnlyImportDeclaration, @@ -4774,7 +4773,7 @@ function getApparentProperties(type: Type, node: ObjectLiteralExpression | JsxAt !(memberType.flags & TypeFlags.Primitive || checker.isArrayLikeType(memberType) || checker.isTypeInvalidDueToUnionDiscriminant(memberType, node) - || typeHasCallOrConstructSignatures(memberType, checker) + || checker.typeHasCallOrConstructSignatures(memberType) || memberType.isClass() && containsNonPublicProperties(memberType.getApparentProperties())))); }