@@ -2436,24 +2436,17 @@ namespace ts {
2436
2436
Debug.assert(!!(type.flags & TypeFlags.Object));
2437
2437
return typeReferenceToTypeNode(<TypeReference>type);
2438
2438
}
2439
- if (objectFlags & ObjectFlags.ClassOrInterface) {
2440
- Debug.assert(!!(type.flags & TypeFlags.Object));
2441
- const name = symbolToName(type.symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ false);
2442
- return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2443
- }
2444
- if (type.flags & TypeFlags.TypeParameter) {
2439
+ if (type.flags & TypeFlags.TypeParameter || objectFlags & ObjectFlags.ClassOrInterface) {
2445
2440
const name = symbolToName(type.symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ false);
2446
2441
// Ignore constraint/default when creating a usage (as opposed to declaration) of a type parameter.
2447
2442
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2448
2443
}
2449
-
2450
2444
if (!inTypeAlias && type.aliasSymbol &&
2451
2445
isSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration, SymbolFlags.Type, /*shouldComputeAliasesToMakeVisible*/ false).accessibility === SymbolAccessibility.Accessible) {
2452
2446
const name = symbolToTypeReferenceName(type.aliasSymbol);
2453
2447
const typeArgumentNodes = toTypeArgumentNodes(type.aliasTypeArguments, context);
2454
2448
return createTypeReferenceNode(name, typeArgumentNodes);
2455
2449
}
2456
-
2457
2450
if (type.flags & (TypeFlags.Union | TypeFlags.Intersection)) {
2458
2451
const types = type.flags & TypeFlags.Union ? formatUnionTypes((<UnionType>type).types) : (<IntersectionType>type).types;
2459
2452
const typeNodes = types && mapToTypeNodeArray(types, context, /*addInElementTypeFlag*/ true, /*addInFirstTypeArgumentFlag*/ false);
@@ -2468,21 +2461,18 @@ namespace ts {
2468
2461
return undefined;
2469
2462
}
2470
2463
}
2471
-
2472
2464
if (objectFlags & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
2473
2465
Debug.assert(!!(type.flags & TypeFlags.Object));
2474
2466
// The type is an object literal type.
2475
2467
return createAnonymousTypeNode(<ObjectType>type);
2476
2468
}
2477
-
2478
2469
if (type.flags & TypeFlags.Index) {
2479
2470
const indexedType = (<IndexType>type).type;
2480
2471
context.flags |= NodeBuilderFlags.InElementType;
2481
2472
const indexTypeNode = typeToTypeNodeHelper(indexedType, context);
2482
2473
Debug.assert(!(context.flags & NodeBuilderFlags.InElementType));
2483
2474
return createTypeOperatorNode(indexTypeNode);
2484
2475
}
2485
-
2486
2476
if (type.flags & TypeFlags.IndexedAccess) {
2487
2477
context.flags |= NodeBuilderFlags.InElementType;
2488
2478
const objectTypeNode = typeToTypeNodeHelper((<IndexedAccessType>type).objectType, context);
@@ -2495,13 +2485,10 @@ namespace ts {
2495
2485
2496
2486
function createMappedTypeNodeFromType(type: MappedType) {
2497
2487
Debug.assert(!!(type.flags & TypeFlags.Object));
2498
- const typeParameter = getTypeParameterFromMappedType(type);
2499
- const typeParameterNode = typeParameterToDeclaration(typeParameter, context);
2500
-
2501
- const templateType = getTemplateTypeFromMappedType(type);
2502
- const templateTypeNode = typeToTypeNodeHelper(templateType, context);
2503
2488
const readonlyToken = type.declaration && type.declaration.readonlyToken ? createToken(SyntaxKind.ReadonlyKeyword) : undefined;
2504
2489
const questionToken = type.declaration && type.declaration.questionToken ? createToken(SyntaxKind.QuestionToken) : undefined;
2490
+ const typeParameterNode = typeParameterToDeclaration(getTypeParameterFromMappedType(type), context);
2491
+ const templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
2505
2492
2506
2493
const mappedTypeNode = createMappedTypeNode(readonlyToken, typeParameterNode, questionToken, templateTypeNode);
2507
2494
return setEmitFlags(mappedTypeNode, EmitFlags.SingleLine);
@@ -2521,7 +2508,7 @@ namespace ts {
2521
2508
const typeAlias = getTypeAliasForTypeLiteral(type);
2522
2509
if (typeAlias) {
2523
2510
// The specified symbol flags need to be reinterpreted as type flags
2524
- const entityName = symbolToName(typeAlias, context, SymbolFlags.Type, /*expectsIdentifier*/ false );
2511
+ const entityName = symbolToName(typeAlias, context, SymbolFlags.Type, /*expectsIdentifier*/ false);
2525
2512
return createTypeReferenceNode(entityName, /*typeArguments*/ undefined);
2526
2513
}
2527
2514
else {
@@ -2802,8 +2789,8 @@ namespace ts {
2802
2789
}
2803
2790
2804
2791
function indexInfoToIndexSignatureDeclarationHelper(indexInfo: IndexInfo, kind: IndexKind, context: NodeBuilderContext): IndexSignatureDeclaration {
2805
- const indexerTypeNode = createKeywordTypeNode(kind === IndexKind.String ? SyntaxKind.StringKeyword : SyntaxKind.NumberKeyword);
2806
2792
const name = getNameFromIndexInfo(indexInfo) || "x";
2793
+ const indexerTypeNode = createKeywordTypeNode(kind === IndexKind.String ? SyntaxKind.StringKeyword : SyntaxKind.NumberKeyword);
2807
2794
2808
2795
const indexingParameter = createParameter(
2809
2796
/*decorators*/ undefined,
@@ -2851,37 +2838,32 @@ namespace ts {
2851
2838
}
2852
2839
2853
2840
function typeParameterToDeclaration(type: TypeParameter, context: NodeBuilderContext): TypeParameterDeclaration {
2841
+ const name = symbolToName(type.symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ true);
2854
2842
const constraint = getConstraintFromTypeParameter(type);
2855
2843
const constraintNode = constraint && typeToTypeNodeHelper(constraint, context);
2856
2844
const defaultParameter = getDefaultFromTypeParameter(type);
2857
2845
const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context);
2858
- const name = symbolToName(type.symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ true);
2859
2846
return createTypeParameterDeclaration(name, constraintNode, defaultParameterNode);
2860
2847
}
2861
2848
2862
2849
function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext): ParameterDeclaration {
2863
2850
const parameterDeclaration = <ParameterDeclaration>getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter);
2851
+ const modifiers = parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedClone);
2852
+ const dotDotDotToken = isRestParameter(parameterDeclaration) ? createToken(SyntaxKind.DotDotDotToken) : undefined;
2853
+ const name = parameterDeclaration.name.kind === SyntaxKind.Identifier ?
2854
+ getSynthesizedClone(parameterDeclaration.name) :
2855
+ cloneBindingName(parameterDeclaration.name);
2856
+ const questionToken = isOptionalParameter(parameterDeclaration) ? createToken(SyntaxKind.QuestionToken) : undefined;
2857
+
2864
2858
let parameterType = getTypeOfSymbol(parameterSymbol);
2865
2859
if (isRequiredInitializedParameter(parameterDeclaration)) {
2866
2860
parameterType = includeFalsyTypes(parameterType, TypeFlags.Undefined);
2867
2861
}
2868
2862
const parameterTypeNode = typeToTypeNodeHelper(parameterType, context);
2869
- let name: BindingName;
2870
- if (parameterDeclaration.name.kind === SyntaxKind.Identifier) {
2871
- name = getSynthesizedClone(parameterDeclaration.name);
2872
- }
2873
- else {
2874
- Debug.assert(parameterDeclaration.name.kind === SyntaxKind.ArrayBindingPattern || parameterDeclaration.name.kind === SyntaxKind.ObjectBindingPattern);
2875
- name = cloneBindingName(parameterDeclaration.name);
2876
- }
2877
- const questionToken = isOptionalParameter(parameterDeclaration) ? createToken(SyntaxKind.QuestionToken) : undefined;
2878
- const dotDotDotToken = (parameterDeclaration ? isRestParameter(parameterDeclaration) : isTransientSymbol(parameterSymbol) && parameterSymbol.isRestParameter) ?
2879
- createToken(SyntaxKind.DotDotDotToken) :
2880
- undefined;
2881
2863
2882
2864
const parameterNode = createParameter(
2883
2865
/*decorators*/ undefined,
2884
- cloneNodeArray(parameterDeclaration. modifiers) ,
2866
+ modifiers,
2885
2867
dotDotDotToken,
2886
2868
name,
2887
2869
questionToken,
0 commit comments