typescript 4.8.0-dev.20220613 → 4.8.0-dev.20220616

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/typescript.js CHANGED
@@ -294,7 +294,7 @@ var ts;
294
294
  // The following is baselined as a literal template type without intervention
295
295
  /** The version of the TypeScript compiler release */
296
296
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
297
- ts.version = ts.versionMajorMinor + ".0-dev.20220613";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220616";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -8668,9 +8668,11 @@ var ts;
8668
8668
  Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1: diag(2205, ts.DiagnosticCategory.Error, "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205", "Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
8669
8669
  The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement: diag(2206, ts.DiagnosticCategory.Error, "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206", "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement."),
8670
8670
  The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement: diag(2207, ts.DiagnosticCategory.Error, "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207", "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement."),
8671
- This_type_parameter_probably_needs_an_extends_object_constraint: diag(2208, ts.DiagnosticCategory.Error, "This_type_parameter_probably_needs_an_extends_object_constraint_2208", "This type parameter probably needs an `extends object` constraint."),
8671
+ This_type_parameter_might_need_an_extends_0_constraint: diag(2208, ts.DiagnosticCategory.Error, "This_type_parameter_might_need_an_extends_0_constraint_2208", "This type parameter might need an `extends {0}` constraint."),
8672
8672
  The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2209, ts.DiagnosticCategory.Error, "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209", "The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),
8673
8673
  The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2210, ts.DiagnosticCategory.Error, "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210", "The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),
8674
+ Add_extends_constraint: diag(2211, ts.DiagnosticCategory.Message, "Add_extends_constraint_2211", "Add `extends` constraint."),
8675
+ Add_extends_constraint_to_all_type_parameters: diag(2212, ts.DiagnosticCategory.Message, "Add_extends_constraint_to_all_type_parameters_2212", "Add `extends` constraint to all type parameters"),
8674
8676
  Duplicate_identifier_0: diag(2300, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_2300", "Duplicate identifier '{0}'."),
8675
8677
  Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2301, ts.DiagnosticCategory.Error, "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),
8676
8678
  Static_members_cannot_reference_class_type_parameters: diag(2302, ts.DiagnosticCategory.Error, "Static_members_cannot_reference_class_type_parameters_2302", "Static members cannot reference class type parameters."),
@@ -9156,6 +9158,8 @@ var ts;
9156
9158
  This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value: diag(2839, ts.DiagnosticCategory.Error, "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839", "This condition will always return '{0}' since JavaScript compares objects by reference, not value."),
9157
9159
  An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes: diag(2840, ts.DiagnosticCategory.Error, "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840", "An interface cannot extend a primitive type like '{0}'; an interface can only extend named types and classes"),
9158
9160
  The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(2841, ts.DiagnosticCategory.Error, "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841", "The type of this expression cannot be named without a 'resolution-mode' assertion, which is an unstable feature. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),
9161
+ _0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation: diag(2842, ts.DiagnosticCategory.Error, "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842", "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?"),
9162
+ We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here: diag(2843, ts.DiagnosticCategory.Error, "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843", "We can only write a type for '{0}' by adding a type for the entire parameter here."),
9159
9163
  Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
9160
9164
  Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
9161
9165
  Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -35970,10 +35974,11 @@ var ts;
35970
35974
  }
35971
35975
  nextToken();
35972
35976
  var typeArguments = parseDelimitedList(20 /* TypeArguments */, parseType);
35973
- if (!parseExpected(31 /* GreaterThanToken */)) {
35977
+ if (reScanGreaterToken() !== 31 /* GreaterThanToken */) {
35974
35978
  // If it doesn't have the closing `>` then it's definitely not an type argument list.
35975
35979
  return undefined;
35976
35980
  }
35981
+ nextToken();
35977
35982
  // We successfully parsed a type argument list. The next token determines whether we want to
35978
35983
  // treat it as such. If the type argument list is followed by `(` or a template literal, as in
35979
35984
  // `f<number>(42)`, we favor the type argument interpretation even though JavaScript would view
@@ -49387,6 +49392,7 @@ var ts;
49387
49392
  var potentialNewTargetCollisions = [];
49388
49393
  var potentialWeakMapSetCollisions = [];
49389
49394
  var potentialReflectCollisions = [];
49395
+ var potentialUnusedRenamedBindingElementsInTypes = [];
49390
49396
  var awaitedTypeStack = [];
49391
49397
  var diagnostics = ts.createDiagnosticCollection();
49392
49398
  var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -52722,6 +52728,9 @@ var ts;
52722
52728
  if (symbol && symbol.flags & 262144 /* TypeParameter */ && meaning & 788968 /* Type */) {
52723
52729
  return { accessibility: 0 /* Accessible */ };
52724
52730
  }
52731
+ if (!symbol && ts.isThisIdentifier(firstIdentifier) && isSymbolAccessible(getSymbolOfNode(ts.getThisContainer(firstIdentifier, /*includeArrowFunctions*/ false)), firstIdentifier, meaning, /*computeAliases*/ false).accessibility === 0 /* Accessible */) {
52732
+ return { accessibility: 0 /* Accessible */ };
52733
+ }
52725
52734
  // Verify if the symbol is accessible
52726
52735
  return (symbol && hasVisibleDeclarations(symbol, /*shouldComputeAliasToMakeVisible*/ true)) || {
52727
52736
  accessibility: 1 /* NotAccessible */,
@@ -53894,15 +53903,22 @@ var ts;
53894
53903
  context.approximateLength += ts.symbolName(parameterSymbol).length + 3;
53895
53904
  return parameterNode;
53896
53905
  function cloneBindingName(node) {
53897
- return elideInitializerAndSetEmitFlags(node);
53898
- function elideInitializerAndSetEmitFlags(node) {
53906
+ return elideInitializerAndPropertyRenamingAndSetEmitFlags(node);
53907
+ function elideInitializerAndPropertyRenamingAndSetEmitFlags(node) {
53899
53908
  if (context.tracker.trackSymbol && ts.isComputedPropertyName(node) && isLateBindableName(node)) {
53900
53909
  trackComputedName(node.expression, context.enclosingDeclaration, context);
53901
53910
  }
53902
- var visited = ts.visitEachChild(node, elideInitializerAndSetEmitFlags, ts.nullTransformationContext, /*nodesVisitor*/ undefined, elideInitializerAndSetEmitFlags);
53911
+ var visited = ts.visitEachChild(node, elideInitializerAndPropertyRenamingAndSetEmitFlags, ts.nullTransformationContext, /*nodesVisitor*/ undefined, elideInitializerAndPropertyRenamingAndSetEmitFlags);
53903
53912
  if (ts.isBindingElement(visited)) {
53904
- visited = ts.factory.updateBindingElement(visited, visited.dotDotDotToken, visited.propertyName, visited.name,
53905
- /*initializer*/ undefined);
53913
+ if (visited.propertyName && ts.isIdentifier(visited.propertyName) && ts.isIdentifier(visited.name)) {
53914
+ visited = ts.factory.updateBindingElement(visited, visited.dotDotDotToken,
53915
+ /* propertyName*/ undefined, visited.propertyName,
53916
+ /*initializer*/ undefined);
53917
+ }
53918
+ else {
53919
+ visited = ts.factory.updateBindingElement(visited, visited.dotDotDotToken, visited.propertyName, visited.name,
53920
+ /*initializer*/ undefined);
53921
+ }
53906
53922
  }
53907
53923
  if (!ts.nodeIsSynthesized(visited)) {
53908
53924
  visited = ts.factory.cloneNode(visited);
@@ -65112,7 +65128,7 @@ var ts;
65112
65128
  return true;
65113
65129
  if (s & 65536 /* Null */ && (!strictNullChecks && !(t & 3145728 /* UnionOrIntersection */) || t & 65536 /* Null */))
65114
65130
  return true;
65115
- if (s & 524288 /* Object */ && t & 67108864 /* NonPrimitive */ && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source)))
65131
+ if (s & 524288 /* Object */ && t & 67108864 /* NonPrimitive */ && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source) && !(ts.getObjectFlags(source) & 8192 /* FreshLiteral */)))
65116
65132
  return true;
65117
65133
  if (relation === assignableRelation || relation === comparableRelation) {
65118
65134
  if (s & 1 /* Any */)
@@ -65675,8 +65691,13 @@ var ts;
65675
65691
  return;
65676
65692
  }
65677
65693
  reportRelationError(headMessage, source, target);
65678
- if (strictNullChecks && source.flags & 8650752 /* TypeVariable */ && ((_b = (_a = source.symbol) === null || _a === void 0 ? void 0 : _a.declarations) === null || _b === void 0 ? void 0 : _b[0]) && !getConstraintOfType(source) && isRelatedTo(emptyObjectType, extractTypesOfKind(target, ~67108864 /* NonPrimitive */))) {
65679
- associateRelatedInfo(ts.createDiagnosticForNode(source.symbol.declarations[0], ts.Diagnostics.This_type_parameter_probably_needs_an_extends_object_constraint));
65694
+ if (source.flags & 262144 /* TypeParameter */ && ((_b = (_a = source.symbol) === null || _a === void 0 ? void 0 : _a.declarations) === null || _b === void 0 ? void 0 : _b[0]) && !getConstraintOfType(source)) {
65695
+ var syntheticParam = cloneTypeParameter(source);
65696
+ syntheticParam.constraint = instantiateType(target, makeUnaryTypeMapper(source, syntheticParam));
65697
+ if (hasNonCircularBaseConstraint(syntheticParam)) {
65698
+ var targetConstraintString = typeToString(target, source.symbol.declarations[0]);
65699
+ associateRelatedInfo(ts.createDiagnosticForNode(source.symbol.declarations[0], ts.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint, targetConstraintString));
65700
+ }
65680
65701
  }
65681
65702
  }
65682
65703
  function traceUnionsOrIntersectionsTooLarge(source, target) {
@@ -65815,7 +65836,7 @@ var ts;
65815
65836
  return typeRelatedToSomeType(getRegularTypeOfObjectLiteral(source), target, reportErrors && !(source.flags & 131068 /* Primitive */) && !(target.flags & 131068 /* Primitive */));
65816
65837
  }
65817
65838
  if (target.flags & 2097152 /* Intersection */) {
65818
- return typeRelatedToEachType(getRegularTypeOfObjectLiteral(source), target, reportErrors, 2 /* Target */);
65839
+ return typeRelatedToEachType(source, target, reportErrors, 2 /* Target */);
65819
65840
  }
65820
65841
  // Source is an intersection. For the comparable relation, if the target is a primitive type we hoist the
65821
65842
  // constraints of all non-primitive types in the source into a new intersection. We do this because the
@@ -68226,12 +68247,13 @@ var ts;
68226
68247
  * with no call or construct signatures.
68227
68248
  */
68228
68249
  function isObjectTypeWithInferableIndex(type) {
68250
+ var objectFlags = ts.getObjectFlags(type);
68229
68251
  return type.flags & 2097152 /* Intersection */
68230
68252
  ? ts.every(type.types, isObjectTypeWithInferableIndex)
68231
68253
  : !!(type.symbol
68232
68254
  && (type.symbol.flags & (4096 /* ObjectLiteral */ | 2048 /* TypeLiteral */ | 384 /* Enum */ | 512 /* ValueModule */)) !== 0
68233
68255
  && !(type.symbol.flags & 32 /* Class */)
68234
- && !typeHasCallOrConstructSignatures(type)) || !!(ts.getObjectFlags(type) & 1024 /* ReverseMapped */ && isObjectTypeWithInferableIndex(type.source));
68256
+ && !typeHasCallOrConstructSignatures(type)) || !!(objectFlags & 4194304 /* ObjectRestType */) || !!(objectFlags & 1024 /* ReverseMapped */ && isObjectTypeWithInferableIndex(type.source));
68235
68257
  }
68236
68258
  function createSymbolWithType(source, type) {
68237
68259
  var symbol = createSymbol(source.flags, source.escapedName, ts.getCheckFlags(source) & 8 /* Readonly */);
@@ -82830,6 +82852,22 @@ var ts;
82830
82852
  }
82831
82853
  });
82832
82854
  }
82855
+ function checkPotentialUncheckedRenamedBindingElementsInTypes() {
82856
+ var _a;
82857
+ for (var _i = 0, potentialUnusedRenamedBindingElementsInTypes_1 = potentialUnusedRenamedBindingElementsInTypes; _i < potentialUnusedRenamedBindingElementsInTypes_1.length; _i++) {
82858
+ var node = potentialUnusedRenamedBindingElementsInTypes_1[_i];
82859
+ if (!((_a = getSymbolOfNode(node)) === null || _a === void 0 ? void 0 : _a.isReferenced)) {
82860
+ var wrappingDeclaration = ts.walkUpBindingElementsAndPatterns(node);
82861
+ ts.Debug.assert(ts.isParameterDeclaration(wrappingDeclaration), "Only parameter declaration should be checked here");
82862
+ var diagnostic = ts.createDiagnosticForNode(node.name, ts.Diagnostics._0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation, ts.declarationNameToString(node.name), ts.declarationNameToString(node.propertyName));
82863
+ if (!wrappingDeclaration.type) {
82864
+ // entire parameter does not have type annotation, suggest adding an annotation
82865
+ ts.addRelatedInfo(diagnostic, ts.createFileDiagnostic(ts.getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 1, ts.Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, ts.declarationNameToString(node.propertyName)));
82866
+ }
82867
+ diagnostics.add(diagnostic);
82868
+ }
82869
+ }
82870
+ }
82833
82871
  function bindingNameText(name) {
82834
82872
  switch (name.kind) {
82835
82873
  case 79 /* Identifier */:
@@ -83131,6 +83169,17 @@ var ts;
83131
83169
  }
83132
83170
  }
83133
83171
  if (ts.isBindingElement(node)) {
83172
+ if (node.propertyName &&
83173
+ ts.isIdentifier(node.name) &&
83174
+ ts.isParameterDeclaration(node) &&
83175
+ ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
83176
+ // type F = ({a: string}) => void;
83177
+ // ^^^^^^
83178
+ // variable renaming in function type notation is confusing,
83179
+ // so we forbid it even if noUnusedLocals is not enabled
83180
+ potentialUnusedRenamedBindingElementsInTypes.push(node);
83181
+ return;
83182
+ }
83134
83183
  if (ts.isObjectBindingPattern(node.parent) && node.dotDotDotToken && languageVersion < 5 /* ES2018 */) {
83135
83184
  checkExternalEmitHelpers(node, 4 /* Rest */);
83136
83185
  }
@@ -86594,6 +86643,7 @@ var ts;
86594
86643
  ts.clear(potentialNewTargetCollisions);
86595
86644
  ts.clear(potentialWeakMapSetCollisions);
86596
86645
  ts.clear(potentialReflectCollisions);
86646
+ ts.clear(potentialUnusedRenamedBindingElementsInTypes);
86597
86647
  ts.forEach(node.statements, checkSourceElement);
86598
86648
  checkSourceElement(node.endOfFileToken);
86599
86649
  checkDeferredNodes(node);
@@ -86609,6 +86659,9 @@ var ts;
86609
86659
  }
86610
86660
  });
86611
86661
  }
86662
+ if (!node.isDeclarationFile) {
86663
+ checkPotentialUncheckedRenamedBindingElementsInTypes();
86664
+ }
86612
86665
  });
86613
86666
  if (compilerOptions.importsNotUsedAsValues === 2 /* Error */ &&
86614
86667
  !node.isDeclarationFile &&
@@ -109350,7 +109403,7 @@ var ts;
109350
109403
  });
109351
109404
  return ret;
109352
109405
  }
109353
- function filterBindingPatternInitializers(name) {
109406
+ function filterBindingPatternInitializersAndRenamings(name) {
109354
109407
  if (name.kind === 79 /* Identifier */) {
109355
109408
  return name;
109356
109409
  }
@@ -109366,7 +109419,12 @@ var ts;
109366
109419
  if (elem.kind === 227 /* OmittedExpression */) {
109367
109420
  return elem;
109368
109421
  }
109369
- return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
109422
+ if (elem.propertyName && ts.isIdentifier(elem.propertyName) && ts.isIdentifier(elem.name) && !elem.symbol.isReferenced) {
109423
+ // Unnecessary property renaming is forbidden in types, so remove renaming
109424
+ return factory.updateBindingElement(elem, elem.dotDotDotToken,
109425
+ /* propertyName */ undefined, elem.propertyName, shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
109426
+ }
109427
+ return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializersAndRenamings(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
109370
109428
  }
109371
109429
  }
109372
109430
  function ensureParameter(p, modifierMask, type) {
@@ -109375,7 +109433,7 @@ var ts;
109375
109433
  oldDiag = getSymbolAccessibilityDiagnostic;
109376
109434
  getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(p);
109377
109435
  }
109378
- var newParam = factory.updateParameterDeclaration(p, maskModifiers(p, modifierMask), p.dotDotDotToken, filterBindingPatternInitializers(p.name), resolver.isOptionalParameter(p) ? (p.questionToken || factory.createToken(57 /* QuestionToken */)) : undefined, ensureType(p, type || p.type, /*ignorePrivate*/ true), // Ignore private param props, since this type is going straight back into a param
109436
+ var newParam = factory.updateParameterDeclaration(p, maskModifiers(p, modifierMask), p.dotDotDotToken, filterBindingPatternInitializersAndRenamings(p.name), resolver.isOptionalParameter(p) ? (p.questionToken || factory.createToken(57 /* QuestionToken */)) : undefined, ensureType(p, type || p.type, /*ignorePrivate*/ true), // Ignore private param props, since this type is going straight back into a param
109379
109437
  ensureNoInitializer(p));
109380
109438
  if (!suppressNewDiagnosticContexts) {
109381
109439
  getSymbolAccessibilityDiagnostic = oldDiag;
@@ -117518,6 +117576,7 @@ var ts;
117518
117576
  ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code,
117519
117577
  ts.Diagnostics.Class_constructor_may_not_be_a_generator.code,
117520
117578
  ts.Diagnostics.Class_constructor_may_not_be_an_accessor.code,
117579
+ ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,
117521
117580
  ]);
117522
117581
  /**
117523
117582
  * Determine if source file needs to be re-created even if its text hasn't changed
@@ -122652,9 +122711,11 @@ var ts;
122652
122711
  }
122653
122712
  function watchAffectingLocationsOfResolution(resolution, addToResolutionsWithOnlyAffectingLocations) {
122654
122713
  ts.Debug.assert(!!resolution.refCount);
122714
+ var affectingLocations = resolution.affectingLocations;
122715
+ if (!affectingLocations.length)
122716
+ return;
122655
122717
  if (addToResolutionsWithOnlyAffectingLocations)
122656
122718
  resolutionsWithOnlyAffectingLocations.push(resolution);
122657
- var affectingLocations = resolution.affectingLocations;
122658
122719
  // Watch package json
122659
122720
  for (var _i = 0, affectingLocations_1 = affectingLocations; _i < affectingLocations_1.length; _i++) {
122660
122721
  var affectingLocation = affectingLocations_1[_i];
@@ -145770,7 +145831,7 @@ var ts;
145770
145831
  return type.symbol && (type.symbol.flags & 1536 /* Module */);
145771
145832
  }
145772
145833
  function visitVariableLikeDeclaration(decl) {
145773
- if (!decl.initializer || ts.isBindingPattern(decl.name)) {
145834
+ if (!decl.initializer || ts.isBindingPattern(decl.name) || ts.isVariableDeclaration(decl) && !isHintableDeclaration(decl)) {
145774
145835
  return;
145775
145836
  }
145776
145837
  var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
@@ -145898,6 +145959,9 @@ var ts;
145898
145959
  }
145899
145960
  for (var i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) {
145900
145961
  var param = node.parameters[i];
145962
+ if (!isHintableDeclaration(param)) {
145963
+ continue;
145964
+ }
145901
145965
  var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(param);
145902
145966
  if (effectiveTypeAnnotation) {
145903
145967
  continue;
@@ -145939,6 +146003,13 @@ var ts;
145939
146003
  function isUndefined(name) {
145940
146004
  return name === "undefined";
145941
146005
  }
146006
+ function isHintableDeclaration(node) {
146007
+ if ((ts.isParameterDeclaration(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node)) && node.initializer) {
146008
+ var initializer = ts.skipParentheses(node.initializer);
146009
+ return !(isHintableLiteral(initializer) || ts.isNewExpression(initializer) || ts.isObjectLiteralExpression(initializer) || ts.isAssertionExpression(initializer));
146010
+ }
146011
+ return true;
146012
+ }
145942
146013
  }
145943
146014
  InlayHints.provideInlayHints = provideInlayHints;
145944
146015
  })(InlayHints = ts.InlayHints || (ts.InlayHints = {}));
@@ -155377,6 +155448,77 @@ var ts;
155377
155448
  })(ts || (ts = {}));
155378
155449
  /* @internal */
155379
155450
  var ts;
155451
+ (function (ts) {
155452
+ var codefix;
155453
+ (function (codefix) {
155454
+ var fixId = "addMissingConstraint";
155455
+ var errorCodes = [
155456
+ // We want errors this could be attached to:
155457
+ // Diagnostics.This_type_parameter_probably_needs_an_extends_0_constraint
155458
+ ts.Diagnostics.Type_0_is_not_comparable_to_type_1.code,
155459
+ ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,
155460
+ ts.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,
155461
+ ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code,
155462
+ ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,
155463
+ ts.Diagnostics.Property_0_is_incompatible_with_index_signature.code,
155464
+ ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,
155465
+ ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code,
155466
+ ];
155467
+ codefix.registerCodeFix({
155468
+ errorCodes: errorCodes,
155469
+ getCodeActions: function (context) {
155470
+ var sourceFile = context.sourceFile, span = context.span, program = context.program;
155471
+ var related = getDiagnosticRelatedInfo(program, sourceFile, span);
155472
+ if (!related) {
155473
+ return;
155474
+ }
155475
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addMissingConstraint(t, related); });
155476
+ return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Add_extends_constraint, fixId, ts.Diagnostics.Add_extends_constraint_to_all_type_parameters)];
155477
+ },
155478
+ fixIds: [fixId],
155479
+ getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
155480
+ var info = getDiagnosticRelatedInfo(context.program, context.sourceFile, diag);
155481
+ if (!info)
155482
+ return;
155483
+ return addMissingConstraint(changes, info);
155484
+ }); },
155485
+ });
155486
+ function getDiagnosticRelatedInfo(program, sourceFile, span) {
155487
+ var diag = ts.find(program.getSemanticDiagnostics(sourceFile), function (diag) { return diag.start === span.start && diag.length === span.length; });
155488
+ if (!diag || !diag.relatedInformation)
155489
+ return;
155490
+ var related = ts.find(diag.relatedInformation, function (related) { return related.code === ts.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint.code; });
155491
+ if (!related)
155492
+ return;
155493
+ return related;
155494
+ }
155495
+ function addMissingConstraint(changes, related) {
155496
+ var decl = findAncestorMatchingSpan(related.file, related);
155497
+ if (!decl)
155498
+ return;
155499
+ if (ts.isIdentifier(decl) && ts.isTypeParameterDeclaration(decl.parent)) {
155500
+ decl = decl.parent;
155501
+ }
155502
+ if (!ts.isTypeParameterDeclaration(decl) || ts.isMappedTypeNode(decl.parent))
155503
+ return; // should only issue fix on type parameters written using `extends`
155504
+ var newConstraint = ts.flattenDiagnosticMessageText(related.messageText, "\n", 0).match(/`extends (.*)`/);
155505
+ if (!newConstraint)
155506
+ return;
155507
+ var newConstraintText = newConstraint[1];
155508
+ changes.insertText(related.file, related.start + related.length, " extends " + newConstraintText);
155509
+ }
155510
+ function findAncestorMatchingSpan(sourceFile, span) {
155511
+ var token = ts.getTokenAtPosition(sourceFile, span.start);
155512
+ var end = ts.textSpanEnd(span);
155513
+ while (token.end < end) {
155514
+ token = token.parent;
155515
+ }
155516
+ return token;
155517
+ }
155518
+ })(codefix = ts.codefix || (ts.codefix = {}));
155519
+ })(ts || (ts = {}));
155520
+ /* @internal */
155521
+ var ts;
155380
155522
  (function (ts) {
155381
155523
  var codefix;
155382
155524
  (function (codefix) {