@@ -79,9 +79,11 @@ namespace ts {
7979 getDeclaredTypeOfSymbol,
8080 getPropertiesOfType,
8181 getPropertyOfType,
82+ getIndexInfoOfType,
8283 getSignaturesOfType,
8384 getIndexTypeOfType,
8485 getBaseTypes,
86+ getTypeFromTypeNode,
8587 getReturnTypeOfSignature,
8688 getNonNullableType,
8789 getSymbolsInScope,
@@ -90,6 +92,7 @@ namespace ts {
9092 getExportSpecifierLocalTargetSymbol,
9193 getTypeAtLocation: getTypeOfNode,
9294 getPropertySymbolOfDestructuringAssignment,
95+ signatureToString,
9396 typeToString,
9497 getSymbolDisplayBuilder,
9598 symbolToString,
@@ -1369,7 +1372,9 @@ namespace ts {
13691372 return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
13701373 }
13711374
1372- // Resolves a qualified name and any involved aliases
1375+ /**
1376+ * Resolves a qualified name and any involved aliases.
1377+ */
13731378 function resolveEntityName(name: EntityNameOrEntityNameExpression, meaning: SymbolFlags, ignoreErrors?: boolean, dontResolveAlias?: boolean, location?: Node): Symbol | undefined {
13741379 if (nodeIsMissing(name)) {
13751380 return undefined;
@@ -2110,7 +2115,7 @@ namespace ts {
21102115 return result || types;
21112116 }
21122117
2113- function visibilityToString(flags: ModifierFlags) {
2118+ function visibilityToString(flags: ModifierFlags): string | undefined {
21142119 if (flags === ModifierFlags.Private) {
21152120 return "private";
21162121 }
@@ -2488,26 +2493,6 @@ namespace ts {
24882493 buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, SymbolFlags.Value, SymbolFormatFlags.None, typeFormatFlags);
24892494 }
24902495
2491- function writeIndexSignature(info: IndexInfo, keyword: SyntaxKind) {
2492- if (info) {
2493- if (info.isReadonly) {
2494- writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
2495- writeSpace(writer);
2496- }
2497- writePunctuation(writer, SyntaxKind.OpenBracketToken);
2498- writer.writeParameter(info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : "x");
2499- writePunctuation(writer, SyntaxKind.ColonToken);
2500- writeSpace(writer);
2501- writeKeyword(writer, keyword);
2502- writePunctuation(writer, SyntaxKind.CloseBracketToken);
2503- writePunctuation(writer, SyntaxKind.ColonToken);
2504- writeSpace(writer);
2505- writeType(info.type, TypeFormatFlags.None);
2506- writePunctuation(writer, SyntaxKind.SemicolonToken);
2507- writer.writeLine();
2508- }
2509- }
2510-
25112496 function writePropertyWithModifiers(prop: Symbol) {
25122497 if (isReadonlySymbol(prop)) {
25132498 writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
@@ -2595,8 +2580,8 @@ namespace ts {
25952580 writePunctuation(writer, SyntaxKind.SemicolonToken);
25962581 writer.writeLine();
25972582 }
2598- writeIndexSignature (resolved.stringIndexInfo, SyntaxKind.StringKeyword );
2599- writeIndexSignature (resolved.numberIndexInfo, SyntaxKind.NumberKeyword );
2583+ buildIndexSignatureDisplay (resolved.stringIndexInfo, writer, IndexKind.String, enclosingDeclaration, globalFlags, symbolStack );
2584+ buildIndexSignatureDisplay (resolved.numberIndexInfo, writer, IndexKind.Number, enclosingDeclaration, globalFlags, symbolStack );
26002585 for (const p of resolved.properties) {
26012586 const t = getTypeOfSymbol(p);
26022587 if (p.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(t).length) {
@@ -2787,6 +2772,11 @@ namespace ts {
27872772 }
27882773
27892774 function buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, symbolStack?: Symbol[]) {
2775+ const returnType = getReturnTypeOfSignature(signature);
2776+ if (flags & TypeFormatFlags.SuppressAnyReturnType && isTypeAny(returnType)) {
2777+ return;
2778+ }
2779+
27902780 if (flags & TypeFormatFlags.WriteArrowStyleSignature) {
27912781 writeSpace(writer);
27922782 writePunctuation(writer, SyntaxKind.EqualsGreaterThanToken);
@@ -2800,7 +2790,6 @@ namespace ts {
28002790 buildTypePredicateDisplay(signature.typePredicate, writer, enclosingDeclaration, flags, symbolStack);
28012791 }
28022792 else {
2803- const returnType = getReturnTypeOfSignature(signature);
28042793 buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack);
28052794 }
28062795 }
@@ -2825,6 +2814,34 @@ namespace ts {
28252814 buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack);
28262815 }
28272816
2817+ function buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]) {
2818+ if (info) {
2819+ if (info.isReadonly) {
2820+ writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
2821+ writeSpace(writer);
2822+ }
2823+ writePunctuation(writer, SyntaxKind.OpenBracketToken);
2824+ writer.writeParameter(info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : "x");
2825+ writePunctuation(writer, SyntaxKind.ColonToken);
2826+ writeSpace(writer);
2827+ switch (kind) {
2828+ case IndexKind.Number:
2829+ writeKeyword(writer, SyntaxKind.NumberKeyword);
2830+ break;
2831+ case IndexKind.String:
2832+ writeKeyword(writer, SyntaxKind.StringKeyword);
2833+ break;
2834+ }
2835+
2836+ writePunctuation(writer, SyntaxKind.CloseBracketToken);
2837+ writePunctuation(writer, SyntaxKind.ColonToken);
2838+ writeSpace(writer);
2839+ buildTypeDisplay(info.type, writer, enclosingDeclaration, globalFlags, symbolStack);
2840+ writePunctuation(writer, SyntaxKind.SemicolonToken);
2841+ writer.writeLine();
2842+ }
2843+ }
2844+
28282845 return _displayBuilder || (_displayBuilder = {
28292846 buildSymbolDisplay,
28302847 buildTypeDisplay,
@@ -2835,6 +2852,7 @@ namespace ts {
28352852 buildDisplayForTypeParametersAndDelimiters,
28362853 buildTypeParameterDisplayFromSymbol,
28372854 buildSignatureDisplay,
2855+ buildIndexSignatureDisplay,
28382856 buildReturnTypeDisplay
28392857 });
28402858 }
@@ -3786,11 +3804,13 @@ namespace ts {
37863804 return signatures;
37873805 }
37883806
3789- // The base constructor of a class can resolve to
3790- // undefinedType if the class has no extends clause,
3791- // unknownType if an error occurred during resolution of the extends expression,
3792- // nullType if the extends expression is the null value, or
3793- // an object type with at least one construct signature.
3807+ /**
3808+ * The base constructor of a class can resolve to
3809+ * * undefinedType if the class has no extends clause,
3810+ * * unknownType if an error occurred during resolution of the extends expression,
3811+ * * nullType if the extends expression is the null value, or
3812+ * * an object type with at least one construct signature.
3813+ */
37943814 function getBaseConstructorTypeOfClass(type: InterfaceType): Type {
37953815 if (!type.resolvedBaseConstructorType) {
37963816 const baseTypeNode = getBaseTypeNodeOfClass(type);
@@ -4271,7 +4291,7 @@ namespace ts {
42714291 return <InterfaceTypeWithDeclaredMembers>type;
42724292 }
42734293
4274- function getTypeWithThisArgument(type: Type, thisArgument?: Type) {
4294+ function getTypeWithThisArgument(type: Type, thisArgument?: Type): Type {
42754295 if (getObjectFlags(type) & ObjectFlags.Reference) {
42764296 return createTypeReference((<TypeReference>type).target,
42774297 concatenate((<TypeReference>type).typeArguments, [thisArgument || (<TypeReference>type).target.thisType]));
@@ -4497,6 +4517,9 @@ namespace ts {
44974517 setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
44984518 }
44994519
4520+ /**
4521+ * Converts an AnonymousType to a ResolvedType.
4522+ */
45004523 function resolveAnonymousTypeMembers(type: AnonymousType) {
45014524 const symbol = type.symbol;
45024525 if (type.target) {
@@ -7278,10 +7301,12 @@ namespace ts {
72787301 return false;
72797302 }
72807303
7281- // Compare two types and return
7282- // Ternary.True if they are related with no assumptions,
7283- // Ternary.Maybe if they are related with assumptions of other relationships, or
7284- // Ternary.False if they are not related.
7304+ /**
7305+ * Compare two types and return
7306+ * * Ternary.True if they are related with no assumptions,
7307+ * * Ternary.Maybe if they are related with assumptions of other relationships, or
7308+ * * Ternary.False if they are not related.
7309+ */
72857310 function isRelatedTo(source: Type, target: Type, reportErrors?: boolean, headMessage?: DiagnosticMessage): Ternary {
72867311 let result: Ternary;
72877312 if (source.flags & TypeFlags.StringOrNumberLiteral && source.flags & TypeFlags.FreshLiteral) {
0 commit comments