diff --git a/Gulpfile.js b/Gulpfile.js
index fb10563067b..68a2b79f222 100644
--- a/Gulpfile.js
+++ b/Gulpfile.js
@@ -232,7 +232,7 @@ task("watch-tsserver").flags = {
" --built": "Compile using the built version of the compiler."
}
-task("min", series(lkgPreBuild, buildTsc, buildServer));
+task("min", series(lkgPreBuild, parallel(buildTsc, buildServer)));
task("min").description = "Builds only tsc and tsserver";
task("min").flags = {
" --built": "Compile using the built version of the compiler."
diff --git a/doc/spec.md b/doc/spec.md
index edf8455ac54..741d4f29cec 100644
--- a/doc/spec.md
+++ b/doc/spec.md
@@ -3715,7 +3715,7 @@ the array literal initializer expression is contextually typed by the implied ty
## 5.3 Let and Const Declarations
-Let and const declarations are exended to include optional type annotations.
+Let and const declarations are extended to include optional type annotations.
*LexicalBinding:* *( Modified )*
*SimpleLexicalBinding*
diff --git a/src/cancellationToken/cancellationToken.ts b/src/cancellationToken/cancellationToken.ts
index 9b74ebb713a..059ef37c8f1 100644
--- a/src/cancellationToken/cancellationToken.ts
+++ b/src/cancellationToken/cancellationToken.ts
@@ -35,8 +35,8 @@ function createCancellationToken(args: string[]): ServerCancellationToken {
}
// cancellationPipeName is a string without '*' inside that can optionally end with '*'
// when client wants to signal cancellation it should create a named pipe with name=
- // server will synchronously check the presence of the pipe and treat its existance as indicator that current request should be canceled.
- // in case if client prefers to use more fine-grained schema than one name for all request it can add '*' to the end of cancelellationPipeName.
+ // server will synchronously check the presence of the pipe and treat its existence as indicator that current request should be canceled.
+ // in case if client prefers to use more fine-grained schema than one name for all request it can add '*' to the end of cancellationPipeName.
// in this case pipe name will be build dynamically as .
if (cancellationPipeName.charAt(cancellationPipeName.length - 1) === "*") {
const namePrefix = cancellationPipeName.slice(0, -1);
diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts
index 27f85896a3b..6781f6f1701 100644
--- a/src/compiler/binder.ts
+++ b/src/compiler/binder.ts
@@ -550,7 +550,7 @@ namespace ts {
}
}
// We create a return control flow graph for IIFEs and constructors. For constructors
- // we use the return control flow graph in strict property intialization checks.
+ // we use the return control flow graph in strict property initialization checks.
currentReturnTarget = isIIFE || node.kind === SyntaxKind.Constructor ? createBranchLabel() : undefined;
currentBreakTarget = undefined;
currentContinueTarget = undefined;
@@ -3445,7 +3445,7 @@ namespace ts {
// If a FunctionDeclaration is generator function and is the body of a
// transformed async function, then this node can be transformed to a
// down-level generator.
- // Currently we do not support transforming any other generator fucntions
+ // Currently we do not support transforming any other generator functions
// down level.
if (node.asteriskToken) {
transformFlags |= TransformFlags.AssertGenerator;
diff --git a/src/compiler/builder.ts b/src/compiler/builder.ts
index 44ae6a299d8..c95a8270052 100644
--- a/src/compiler/builder.ts
+++ b/src/compiler/builder.ts
@@ -27,7 +27,7 @@ namespace ts {
currentChangedFilePath: Path | undefined;
/**
* Map of file signatures, with key being file path, calculated while getting current changed file's affected files
- * These will be commited whenever the iteration through affected files of current changed file is complete
+ * These will be committed whenever the iteration through affected files of current changed file is complete
*/
currentAffectedFilesSignatures: Map | undefined;
/**
diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts
index 552f46c378d..a394ff56201 100644
--- a/src/compiler/builderState.ts
+++ b/src/compiler/builderState.ts
@@ -37,7 +37,7 @@ namespace ts {
*/
readonly referencedMap: ReadonlyMap | undefined;
/**
- * Contains the map of exported modules ReferencedSet=exorted module files from the file if module emit is enabled
+ * Contains the map of exported modules ReferencedSet=exported module files from the file if module emit is enabled
* Otherwise undefined
*/
readonly exportedModulesMap: Map | undefined;
@@ -268,9 +268,9 @@ namespace ts.BuilderState {
*/
export function getFilesAffectedBy(state: BuilderState, programOfThisState: Program, path: Path, cancellationToken: CancellationToken | undefined, computeHash: ComputeHash, cacheToUpdateSignature?: Map, exportedModulesMapCache?: ComputingExportedModulesMap): ReadonlyArray {
// Since the operation could be cancelled, the signatures are always stored in the cache
- // They will be commited once it is safe to use them
+ // They will be committed once it is safe to use them
// eg when calling this api from tsserver, if there is no cancellation of the operation
- // In the other cases the affected files signatures are commited only after the iteration through the result is complete
+ // In the other cases the affected files signatures are committed only after the iteration through the result is complete
const signatureCache = cacheToUpdateSignature || createMap();
const sourceFile = programOfThisState.getSourceFileByPath(path);
if (!sourceFile) {
diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index ed65908d926..ac4f9561131 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -3789,7 +3789,7 @@ namespace ts {
context.approximateLength += (symbolName(propertySymbol).length + 1);
context.enclosingDeclaration = saveEnclosingDeclaration;
const optionalToken = propertySymbol.flags & SymbolFlags.Optional ? createToken(SyntaxKind.QuestionToken) : undefined;
- if (propertySymbol.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(propertyType).length) {
+ if (propertySymbol.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(propertyType).length && !isReadonlySymbol(propertySymbol)) {
const signatures = getSignaturesOfType(propertyType, SignatureKind.Call);
for (const signature of signatures) {
const methodDeclaration = signatureToSignatureDeclarationHelper(signature, SyntaxKind.MethodSignature, context);
@@ -4791,7 +4791,7 @@ namespace ts {
if (!isTypeAssignableTo(getLiteralTypeFromProperty(prop, TypeFlags.StringOrNumberLiteralOrUnique), omitKeyType)
&& !(getDeclarationModifierFlagsFromSymbol(prop) & (ModifierFlags.Private | ModifierFlags.Protected))
&& isSpreadableProperty(prop)) {
- members.set(prop.escapedName, getSpreadSymbol(prop));
+ members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
}
}
const stringIndexInfo = getIndexInfoOfType(source, IndexKind.String);
@@ -4866,17 +4866,8 @@ namespace ts {
function getTypeForBindingElement(declaration: BindingElement): Type | undefined {
const pattern = declaration.parent;
let parentType = getTypeForBindingElementParent(pattern.parent);
- // If parent has the unknown (error) type, then so does this binding element
- if (parentType === errorType) {
- return errorType;
- }
- // If no type was specified or inferred for parent,
- // infer from the initializer of the binding element if one is present.
- // Otherwise, go with the undefined type of the parent.
- if (!parentType) {
- return declaration.initializer ? checkDeclarationInitializer(declaration) : parentType;
- }
- if (isTypeAny(parentType)) {
+ // If no type or an any type was inferred for parent, infer that for the binding element
+ if (!parentType || isTypeAny(parentType)) {
return parentType;
}
// Relax null check on ambient destructuring parameters, since the parameters have no implementation and are just documentation
@@ -4962,6 +4953,12 @@ namespace ts {
return strictNullChecks && optional ? getOptionalType(type) : type;
}
+ function isParameterOfContextuallyTypedFunction(node: Declaration) {
+ return node.kind === SyntaxKind.Parameter &&
+ (node.parent.kind === SyntaxKind.FunctionExpression || node.parent.kind === SyntaxKind.ArrowFunction) &&
+ !!getContextualType(node.parent);
+ }
+
// Return the inferred type for a variable, parameter, or property declaration
function getTypeForVariableLikeDeclaration(declaration: ParameterDeclaration | PropertyDeclaration | PropertySignature | VariableDeclaration | BindingElement, includeOptionality: boolean): Type | undefined {
// A variable declared in a for..in statement is of type string, or of type keyof T when the
@@ -5045,8 +5042,9 @@ namespace ts {
}
}
- // Use the type of the initializer expression if one is present
- if (declaration.initializer) {
+ // Use the type of the initializer expression if one is present and the declaration is
+ // not a parameter of a contextually typed function
+ if (declaration.initializer && !isParameterOfContextuallyTypedFunction(declaration)) {
const type = checkDeclarationInitializer(declaration);
return addOptionality(type, isOptional);
}
@@ -5057,8 +5055,9 @@ namespace ts {
return trueType;
}
- // If the declaration specifies a binding pattern, use the type implied by the binding pattern
- if (isBindingPattern(declaration.name)) {
+ // If the declaration specifies a binding pattern and is not a parameter of a contextually
+ // typed function, use the type implied by the binding pattern
+ if (isBindingPattern(declaration.name) && !isParameterOfContextuallyTypedFunction(declaration)) {
return getTypeFromBindingPattern(declaration.name, /*includePatternInType*/ false, /*reportErrors*/ true);
}
@@ -5695,17 +5694,21 @@ namespace ts {
}
function reportCircularityError(symbol: Symbol) {
+ const declaration = symbol.valueDeclaration;
// Check if variable has type annotation that circularly references the variable itself
- if (getEffectiveTypeAnnotationNode(symbol.valueDeclaration)) {
+ if (getEffectiveTypeAnnotationNode(declaration)) {
error(symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,
symbolToString(symbol));
return errorType;
}
- // Otherwise variable has initializer that circularly references the variable itself
- if (noImplicitAny) {
+ // Check if variable has initializer that circularly references the variable itself
+ if (noImplicitAny && (declaration.kind !== SyntaxKind.Parameter || (declaration).initializer)) {
error(symbol.valueDeclaration, Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer,
symbolToString(symbol));
}
+ // Circularities could also result from parameters in function expressions that end up
+ // having themselves as contextual types following type argument inference. In those cases
+ // we have already reported an implicit any error so we don't report anything here.
return anyType;
}
@@ -6315,7 +6318,7 @@ namespace ts {
return false;
}
- /** A type parameter is thisless if its contraint is thisless, or if it has no constraint. */
+ /** A type parameter is thisless if its constraint is thisless, or if it has no constraint. */
function isThislessTypeParameter(node: TypeParameterDeclaration) {
const constraint = getEffectiveConstraintOfTypeParameter(node);
return !constraint || isThislessType(constraint);
@@ -9121,7 +9124,7 @@ namespace ts {
function createTupleType(elementTypes: ReadonlyArray, minLength = elementTypes.length, hasRestElement = false, readonly = false, associatedNames?: __String[]) {
const arity = elementTypes.length;
if (arity === 1 && hasRestElement) {
- return createArrayType(elementTypes[0]);
+ return createArrayType(elementTypes[0], readonly);
}
const tupleType = getTupleTypeOfArity(arity, minLength, arity > 0 && hasRestElement, readonly, associatedNames);
return elementTypes.length ? createTypeReference(tupleType, elementTypes) : tupleType;
@@ -10038,10 +10041,10 @@ namespace ts {
if (checkType.flags & TypeFlags.Any) {
return getUnionType([instantiateType(root.trueType, combinedMapper || mapper), instantiateType(root.falseType, mapper)]);
}
- // Return falseType for a definitely false extends check. We check an instantations of the two
+ // Return falseType for a definitely false extends check. We check an instantiations of the two
// types with type parameters mapped to the wildcard type, the most permissive instantiations
// possible (the wildcard type is assignable to and from all types). If those are not related,
- // then no instatiations will be and we can just return the false branch type.
+ // then no instantiations will be and we can just return the false branch type.
if (!isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType))) {
return instantiateType(root.falseType, mapper);
}
@@ -10255,7 +10258,7 @@ namespace ts {
* this function should be called in a left folding style, with left = previous result of getSpreadType
* and right = the new element to be spread.
*/
- function getSpreadType(left: Type, right: Type, symbol: Symbol | undefined, typeFlags: TypeFlags, objectFlags: ObjectFlags): Type {
+ function getSpreadType(left: Type, right: Type, symbol: Symbol | undefined, typeFlags: TypeFlags, objectFlags: ObjectFlags, readonly: boolean): Type {
if (left.flags & TypeFlags.Any || right.flags & TypeFlags.Any) {
return anyType;
}
@@ -10269,10 +10272,10 @@ namespace ts {
return left;
}
if (left.flags & TypeFlags.Union) {
- return mapType(left, t => getSpreadType(t, right, symbol, typeFlags, objectFlags));
+ return mapType(left, t => getSpreadType(t, right, symbol, typeFlags, objectFlags, readonly));
}
if (right.flags & TypeFlags.Union) {
- return mapType(right, t => getSpreadType(left, t, symbol, typeFlags, objectFlags));
+ return mapType(right, t => getSpreadType(left, t, symbol, typeFlags, objectFlags, readonly));
}
if (right.flags & (TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.BigIntLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index)) {
return left;
@@ -10289,7 +10292,7 @@ namespace ts {
const types = (left).types;
const lastLeft = types[types.length - 1];
if (isNonGenericObjectType(lastLeft) && isNonGenericObjectType(right)) {
- return getIntersectionType(concatenate(types.slice(0, types.length - 1), [getSpreadType(lastLeft, right, symbol, typeFlags, objectFlags)]));
+ return getIntersectionType(concatenate(types.slice(0, types.length - 1), [getSpreadType(lastLeft, right, symbol, typeFlags, objectFlags, readonly)]));
}
}
return getIntersectionType([left, right]);
@@ -10314,7 +10317,7 @@ namespace ts {
skippedPrivateMembers.set(rightProp.escapedName, true);
}
else if (isSpreadableProperty(rightProp)) {
- members.set(rightProp.escapedName, getSpreadSymbol(rightProp));
+ members.set(rightProp.escapedName, getSpreadSymbol(rightProp, readonly));
}
}
@@ -10338,7 +10341,7 @@ namespace ts {
}
}
else {
- members.set(leftProp.escapedName, getSpreadSymbol(leftProp));
+ members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
}
}
@@ -10347,8 +10350,8 @@ namespace ts {
members,
emptyArray,
emptyArray,
- getNonReadonlyIndexSignature(stringIndexInfo),
- getNonReadonlyIndexSignature(numberIndexInfo));
+ getIndexInfoWithReadonly(stringIndexInfo, readonly),
+ getIndexInfoWithReadonly(numberIndexInfo, readonly));
spread.flags |= TypeFlags.ContainsObjectLiteral | typeFlags;
spread.objectFlags |= ObjectFlags.ObjectLiteral | ObjectFlags.ContainsSpread | objectFlags;
return spread;
@@ -10360,14 +10363,13 @@ namespace ts {
!prop.declarations.some(decl => isClassLike(decl.parent));
}
- function getSpreadSymbol(prop: Symbol) {
- const isReadonly = isReadonlySymbol(prop);
+ function getSpreadSymbol(prop: Symbol, readonly: boolean) {
const isSetonlyAccessor = prop.flags & SymbolFlags.SetAccessor && !(prop.flags & SymbolFlags.GetAccessor);
- if (!isReadonly && !isSetonlyAccessor) {
+ if (!isSetonlyAccessor && readonly === isReadonlySymbol(prop)) {
return prop;
}
const flags = SymbolFlags.Property | (prop.flags & SymbolFlags.Optional);
- const result = createSymbol(flags, prop.escapedName);
+ const result = createSymbol(flags, prop.escapedName, readonly ? CheckFlags.Readonly : 0);
result.type = isSetonlyAccessor ? undefinedType : getTypeOfSymbol(prop);
result.declarations = prop.declarations;
result.nameType = prop.nameType;
@@ -10375,11 +10377,8 @@ namespace ts {
return result;
}
- function getNonReadonlyIndexSignature(index: IndexInfo | undefined) {
- if (index && index.isReadonly) {
- return createIndexInfo(index.type, /*isReadonly*/ false, index.declaration);
- }
- return index;
+ function getIndexInfoWithReadonly(info: IndexInfo | undefined, readonly: boolean) {
+ return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
}
function createLiteralType(flags: TypeFlags, value: string | number | PseudoBigInt, symbol: Symbol | undefined) {
@@ -14502,7 +14501,7 @@ namespace ts {
// that is _too good_ in projects with complicated constraints (eg, fp-ts). In such cases, if we did not limit ourselves
// here, we might produce more valid inferences for types, causing us to do more checks and perform more instantiations
// (in addition to the extra stack depth here) which, in turn, can push the already close process over its limit.
- // TL;DR: If we ever become generally more memory efficienct (or our resource budget ever increases), we should just
+ // TL;DR: If we ever become generally more memory efficient (or our resource budget ever increases), we should just
// remove this `allowComplexConstraintInference` flag.
allowComplexConstraintInference = false;
return inferFromTypes(apparentSource, target);
@@ -14868,17 +14867,23 @@ namespace ts {
case "console":
return Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom;
case "$":
- return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig;
+ return compilerOptions.types
+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig
+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_types_Slashjquery;
case "describe":
case "suite":
case "it":
case "test":
- return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_types_Slashjest_or_npm_i_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig;
+ return compilerOptions.types
+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_types_Slashjest_or_npm_i_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig
+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_types_Slashjest_or_npm_i_types_Slashmocha;
case "process":
case "require":
case "Buffer":
case "module":
- return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig;
+ return compilerOptions.types
+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig
+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_types_Slashnode;
case "Map":
case "Set":
case "Promise":
@@ -17020,7 +17025,7 @@ namespace ts {
}
function isInConstructorArgumentInitializer(node: Node, constructorDecl: Node): boolean {
- return !!findAncestor(node, n => n === constructorDecl ? "quit" : n.kind === SyntaxKind.Parameter);
+ return !!findAncestor(node, n => isFunctionLikeDeclaration(n) ? "quit" : n.kind === SyntaxKind.Parameter && n.parent === constructorDecl);
}
function checkSuperExpression(node: Node): Type {
@@ -17806,7 +17811,7 @@ namespace ts {
return getContextualTypeForArgument(parent, node);
case SyntaxKind.TypeAssertionExpression:
case SyntaxKind.AsExpression:
- return getTypeFromTypeNode((parent).type);
+ return isConstTypeReference((parent).type) ? undefined : getTypeFromTypeNode((parent).type);
case SyntaxKind.BinaryExpression:
return getContextualTypeForBinaryOperand(node);
case SyntaxKind.PropertyAssignment:
@@ -18092,6 +18097,7 @@ namespace ts {
const elementTypes: Type[] = [];
const inDestructuringPattern = isAssignmentTarget(node);
const contextualType = getApparentTypeOfContextualType(node);
+ const inConstContext = isConstContext(node);
for (let index = 0; index < elementCount; index++) {
const e = elements[index];
if (inDestructuringPattern && e.kind === SyntaxKind.SpreadElement) {
@@ -18134,7 +18140,7 @@ namespace ts {
type.pattern = node;
return type;
}
- else if (tupleResult = getArrayLiteralTupleTypeIfApplicable(elementTypes, contextualType, hasRestElement, elementCount)) {
+ else if (tupleResult = getArrayLiteralTupleTypeIfApplicable(elementTypes, contextualType, hasRestElement, elementCount, inConstContext)) {
return tupleResult;
}
else if (forceTuple) {
@@ -18143,14 +18149,14 @@ namespace ts {
}
return createArrayType(elementTypes.length ?
getUnionType(elementTypes, UnionReduction.Subtype) :
- strictNullChecks ? implicitNeverType : undefinedWideningType);
+ strictNullChecks ? implicitNeverType : undefinedWideningType, inConstContext);
}
- function getArrayLiteralTupleTypeIfApplicable(elementTypes: Type[], contextualType: Type | undefined, hasRestElement: boolean, elementCount = elementTypes.length) {
+ function getArrayLiteralTupleTypeIfApplicable(elementTypes: Type[], contextualType: Type | undefined, hasRestElement: boolean, elementCount = elementTypes.length, readonly = false) {
// Infer a tuple type when the contextual type is or contains a tuple-like type
- if (contextualType && forEachType(contextualType, isTupleLikeType)) {
+ if (readonly || (contextualType && forEachType(contextualType, isTupleLikeType))) {
const minLength = elementCount - (hasRestElement ? 1 : 0);
- const pattern = contextualType.pattern;
+ const pattern = contextualType && contextualType.pattern;
// If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting
// tuple type with the corresponding binding or assignment element types to make the lengths equal.
if (!hasRestElement && pattern && (pattern.kind === SyntaxKind.ArrayBindingPattern || pattern.kind === SyntaxKind.ArrayLiteralExpression)) {
@@ -18168,7 +18174,7 @@ namespace ts {
}
}
}
- return createTupleType(elementTypes, minLength, hasRestElement);
+ return createTupleType(elementTypes, minLength, hasRestElement, readonly);
}
}
@@ -18240,15 +18246,15 @@ namespace ts {
return links.resolvedType;
}
- function getObjectLiteralIndexInfo(propertyNodes: NodeArray, offset: number, properties: Symbol[], kind: IndexKind): IndexInfo {
+ function getObjectLiteralIndexInfo(node: ObjectLiteralExpression, offset: number, properties: Symbol[], kind: IndexKind): IndexInfo {
const propTypes: Type[] = [];
for (let i = 0; i < properties.length; i++) {
- if (kind === IndexKind.String || isNumericName(propertyNodes[i + offset].name!)) {
+ if (kind === IndexKind.String || isNumericName(node.properties[i + offset].name!)) {
propTypes.push(getTypeOfSymbol(properties[i]));
}
}
const unionType = propTypes.length ? getUnionType(propTypes, UnionReduction.Subtype) : undefinedType;
- return createIndexInfo(unionType, /*isReadonly*/ false);
+ return createIndexInfo(unionType, isConstContext(node));
}
function getImmediateAliasedSymbol(symbol: Symbol): Symbol | undefined {
@@ -18276,6 +18282,8 @@ namespace ts {
const contextualType = getApparentTypeOfContextualType(node);
const contextualTypeHasPattern = contextualType && contextualType.pattern &&
(contextualType.pattern.kind === SyntaxKind.ObjectBindingPattern || contextualType.pattern.kind === SyntaxKind.ObjectLiteralExpression);
+ const inConstContext = isConstContext(node);
+ const checkFlags = inConstContext ? CheckFlags.Readonly : 0;
const isInJavascript = isInJSFile(node) && !isInJsonFile(node);
const enumTag = getJSDocEnumTag(node);
const isJSObjectLiteral = !contextualType && isInJavascript && !enumTag;
@@ -18310,8 +18318,8 @@ namespace ts {
typeFlags |= type.flags;
const nameType = computedNameType && isTypeUsableAsPropertyName(computedNameType) ? computedNameType : undefined;
const prop = nameType ?
- createSymbol(SymbolFlags.Property | member.flags, getPropertyNameFromType(nameType), CheckFlags.Late) :
- createSymbol(SymbolFlags.Property | member.flags, member.escapedName);
+ createSymbol(SymbolFlags.Property | member.flags, getPropertyNameFromType(nameType), checkFlags | CheckFlags.Late) :
+ createSymbol(SymbolFlags.Property | member.flags, member.escapedName, checkFlags);
if (nameType) {
prop.nameType = nameType;
}
@@ -18355,7 +18363,7 @@ namespace ts {
checkExternalEmitHelpers(memberDecl, ExternalEmitHelpers.Assign);
}
if (propertiesArray.length > 0) {
- spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, ObjectFlags.FreshLiteral);
+ spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, ObjectFlags.FreshLiteral, inConstContext);
propertiesArray = [];
propertiesTable = createSymbolTable();
hasComputedStringProperty = false;
@@ -18367,7 +18375,7 @@ namespace ts {
error(memberDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types);
return errorType;
}
- spread = getSpreadType(spread, type, node.symbol, propagatedFlags, ObjectFlags.FreshLiteral);
+ spread = getSpreadType(spread, type, node.symbol, propagatedFlags, ObjectFlags.FreshLiteral, inConstContext);
offset = i + 1;
continue;
}
@@ -18417,7 +18425,7 @@ namespace ts {
if (spread !== emptyObjectType) {
if (propertiesArray.length > 0) {
- spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, ObjectFlags.FreshLiteral);
+ spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, ObjectFlags.FreshLiteral, inConstContext);
}
return spread;
}
@@ -18425,8 +18433,8 @@ namespace ts {
return createObjectLiteralType();
function createObjectLiteralType() {
- const stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, IndexKind.String) : undefined;
- const numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, IndexKind.Number) : undefined;
+ const stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, IndexKind.String) : undefined;
+ const numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, IndexKind.Number) : undefined;
const result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo);
result.flags |= TypeFlags.ContainsObjectLiteral | typeFlags & TypeFlags.PropagatingFlags;
result.objectFlags |= ObjectFlags.ObjectLiteral | freshObjectLiteralFlag;
@@ -18556,7 +18564,7 @@ namespace ts {
else {
Debug.assert(attributeDecl.kind === SyntaxKind.JsxSpreadAttribute);
if (attributesTable.size > 0) {
- spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, typeFlags, objectFlags);
+ spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, typeFlags, objectFlags, /*readonly*/ false);
attributesTable = createSymbolTable();
}
const exprType = checkExpressionCached(attributeDecl.expression, checkMode);
@@ -18564,7 +18572,7 @@ namespace ts {
hasSpreadAnyType = true;
}
if (isValidSpreadType(exprType)) {
- spread = getSpreadType(spread, exprType, attributes.symbol, typeFlags, objectFlags);
+ spread = getSpreadType(spread, exprType, attributes.symbol, typeFlags, objectFlags, /*readonly*/ false);
}
else {
typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType;
@@ -18574,7 +18582,7 @@ namespace ts {
if (!hasSpreadAnyType) {
if (attributesTable.size > 0) {
- spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, typeFlags, objectFlags);
+ spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, typeFlags, objectFlags, /*readonly*/ false);
}
}
@@ -18606,7 +18614,7 @@ namespace ts {
const childPropMap = createSymbolTable();
childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, emptyArray, emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined),
- attributes.symbol, typeFlags, objectFlags);
+ attributes.symbol, typeFlags, objectFlags, /*readonly*/ false);
}
}
@@ -18936,7 +18944,7 @@ namespace ts {
// if jsx emit was not react as there wont be error being emitted
reactSym.isReferenced = SymbolFlags.All;
- // If react symbol is alias, mark it as refereced
+ // If react symbol is alias, mark it as referenced
if (reactSym.flags & SymbolFlags.Alias && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) {
markAliasSymbolAsReferenced(reactSym);
}
@@ -21278,7 +21286,7 @@ namespace ts {
const anonymousSymbol = createSymbol(SymbolFlags.TypeLiteral, InternalSymbolName.Type);
const defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, emptyArray, emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
anonymousSymbol.type = defaultContainingObject;
- synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*typeFLags*/ 0, /*objectFlags*/ 0) : defaultContainingObject;
+ synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*typeFLags*/ 0, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
}
else {
synthType.syntheticType = type;
@@ -21330,12 +21338,39 @@ namespace ts {
return checkAssertionWorker(node, node.type, node.expression);
}
+ function isValidConstAssertionArgument(node: Node): boolean {
+ switch (node.kind) {
+ case SyntaxKind.StringLiteral:
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
+ case SyntaxKind.NumericLiteral:
+ case SyntaxKind.BigIntLiteral:
+ case SyntaxKind.TrueKeyword:
+ case SyntaxKind.FalseKeyword:
+ case SyntaxKind.ArrayLiteralExpression:
+ case SyntaxKind.ObjectLiteralExpression:
+ return true;
+ case SyntaxKind.ParenthesizedExpression:
+ return isValidConstAssertionArgument((node).expression);
+ case SyntaxKind.PrefixUnaryExpression:
+ const op = (node).operator;
+ const arg = (node).operand;
+ return op === SyntaxKind.MinusToken && (arg.kind === SyntaxKind.NumericLiteral || arg.kind === SyntaxKind.BigIntLiteral) ||
+ op === SyntaxKind.PlusToken && arg.kind === SyntaxKind.NumericLiteral;
+ }
+ return false;
+ }
+
function checkAssertionWorker(errNode: Node, type: TypeNode, expression: UnaryExpression | Expression, checkMode?: CheckMode) {
- const exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(checkExpression(expression, checkMode)));
-
+ let exprType = checkExpression(expression, checkMode);
+ if (isConstTypeReference(type)) {
+ if (!isValidConstAssertionArgument(expression)) {
+ error(expression, Diagnostics.A_const_assertion_can_only_be_applied_to_a_string_number_boolean_array_or_object_literal);
+ }
+ return getRegularTypeOfLiteralType(exprType);
+ }
checkSourceElement(type);
+ exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(exprType));
const targetType = getTypeFromTypeNode(type);
-
if (produceDiagnostics && targetType !== errorType) {
const widenedType = getWidenedType(exprType);
if (!isTypeComparableTo(targetType, widenedType)) {
@@ -23055,12 +23090,20 @@ namespace ts {
return false;
}
+ function isConstContext(node: Expression): boolean {
+ const parent = node.parent;
+ return isAssertionExpression(parent) && isConstTypeReference(parent.type) ||
+ (isParenthesizedExpression(parent) || isArrayLiteralExpression(parent) || isSpreadElement(parent)) && isConstContext(parent) ||
+ (isPropertyAssignment(parent) || isShorthandPropertyAssignment(parent)) && isConstContext(parent.parent);
+ }
+
function checkExpressionForMutableLocation(node: Expression, checkMode: CheckMode | undefined, contextualType?: Type, forceTuple?: boolean): Type {
if (arguments.length === 2) {
contextualType = getContextualType(node);
}
const type = checkExpression(node, checkMode, forceTuple);
- return isTypeAssertion(node) ? type :
+ return isConstContext(node) ? getRegularTypeOfLiteralType(type) :
+ isTypeAssertion(node) ? type :
getWidenedLiteralLikeTypeForContextualType(type, contextualType);
}
@@ -23124,7 +23167,7 @@ namespace ts {
return getReturnTypeOfSignature(signature);
}
}
- else if (expr.kind === SyntaxKind.TypeAssertionExpression || expr.kind === SyntaxKind.AsExpression) {
+ else if (isAssertionExpression(expr) && !isConstTypeReference(expr.type)) {
return getTypeFromTypeNode((expr).type);
}
// Otherwise simply call checkExpression. Ideally, the entire family of checkXXX functions
@@ -25680,7 +25723,7 @@ namespace ts {
const parent = node.parent.parent;
const parentType = getTypeForBindingElementParent(parent);
const name = node.propertyName || node.name;
- if (!isBindingPattern(name) && parentType) {
+ if (parentType && !isBindingPattern(name)) {
const exprType = getLiteralTypeFromPropertyName(name);
if (isTypeUsableAsPropertyName(exprType)) {
const nameText = getPropertyNameFromType(exprType);
@@ -28293,7 +28336,7 @@ namespace ts {
throwIfNonDiagnosticsProducing();
if (sourceFile) {
// Some global diagnostics are deferred until they are needed and
- // may not be reported in the firt call to getGlobalDiagnostics.
+ // may not be reported in the first call to getGlobalDiagnostics.
// We should catch these changes and report them.
const previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics();
const previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length;
diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts
index 43275605e23..5f01e66e073 100644
--- a/src/compiler/commandLineParser.ts
+++ b/src/compiler/commandLineParser.ts
@@ -1935,7 +1935,7 @@ namespace ts {
function directoryOfCombinedPath(fileName: string, basePath: string) {
// Use the `getNormalizedAbsolutePath` function to avoid canonicalizing the path, as it must remain noncanonical
- // until consistient casing errors are reported
+ // until consistent casing errors are reported
return getDirectoryPath(getNormalizedAbsolutePath(fileName, basePath));
}
diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json
index cdd3f2154a2..dbc6fcd91da 100644
--- a/src/compiler/diagnosticMessages.json
+++ b/src/compiler/diagnosticMessages.json
@@ -1027,6 +1027,10 @@
"category": "Error",
"code": 1354
},
+ "A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.": {
+ "category": "Error",
+ "code": 1355
+ },
"Duplicate identifier '{0}'.": {
"category": "Error",
@@ -2096,15 +2100,15 @@
"category": "Error",
"code": 2577
},
- "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.": {
+ "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i @types/node`.": {
"category": "Error",
"code": 2580
},
- "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.": {
+ "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.": {
"category": "Error",
"code": 2581
},
- "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.": {
+ "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.": {
"category": "Error",
"code": 2582
},
@@ -2140,6 +2144,18 @@
"category": "Error",
"code": 2590
},
+ "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.": {
+ "category": "Error",
+ "code": 2591
+ },
+ "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.": {
+ "category": "Error",
+ "code": 2592
+ },
+ "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.": {
+ "category": "Error",
+ "code": 2593
+ },
"JSX element attributes type '{0}' may not be a union type.": {
"category": "Error",
"code": 2600
diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts
index 24619f4fb7b..fdd93765cf0 100644
--- a/src/compiler/factory.ts
+++ b/src/compiler/factory.ts
@@ -2979,7 +2979,7 @@ namespace ts {
return node.emitNode = { annotatedNodes: [node] } as EmitNode;
}
- const sourceFile = getSourceFileOfNode(node);
+ const sourceFile = getSourceFileOfNode(getParseTreeNode(getSourceFileOfNode(node)));
getOrCreateEmitNode(sourceFile).annotatedNodes!.push(node);
}
diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts
index 5027208838f..0970ec22490 100644
--- a/src/compiler/utilities.ts
+++ b/src/compiler/utilities.ts
@@ -5612,6 +5612,11 @@ namespace ts {
return node.kind === SyntaxKind.TypeAssertionExpression;
}
+ export function isConstTypeReference(node: Node) {
+ return isTypeReferenceNode(node) && isIdentifier(node.typeName) &&
+ node.typeName.escapedText === "const" && !node.typeArguments;
+ }
+
export function isParenthesizedExpression(node: Node): node is ParenthesizedExpression {
return node.kind === SyntaxKind.ParenthesizedExpression;
}
diff --git a/src/lib/es2017.sharedmemory.d.ts b/src/lib/es2017.sharedmemory.d.ts
index 018a2f162a5..1d052d6a988 100644
--- a/src/lib/es2017.sharedmemory.d.ts
+++ b/src/lib/es2017.sharedmemory.d.ts
@@ -103,7 +103,7 @@ interface Atomics {
* Wakes up sleeping agents that are waiting on the given index of the array, returning the
* number of agents that were awoken.
*/
- wake(typedArray: Int32Array, index: number, count: number): number;
+ notify(typedArray: Int32Array, index: number, count: number): number;
/**
* Stores the bitwise XOR of a value with the value at the given position in the array,
@@ -115,4 +115,4 @@ interface Atomics {
readonly [Symbol.toStringTag]: "Atomics";
}
-declare var Atomics: Atomics;
\ No newline at end of file
+declare var Atomics: Atomics;
diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts
index 51833bb2e6e..6dccc08c4b5 100644
--- a/src/server/editorServices.ts
+++ b/src/server/editorServices.ts
@@ -904,7 +904,7 @@ namespace ts.server {
getPreferences(file: NormalizedPath): protocol.UserPreferences {
const info = this.getScriptInfoForNormalizedPath(file);
- return info && info.getPreferences() || this.hostConfiguration.preferences;
+ return { ...this.hostConfiguration.preferences, ...info && info.getPreferences() };
}
getHostFormatCodeOptions(): FormatCodeSettings {
diff --git a/src/server/session.ts b/src/server/session.ts
index 2257c6740f4..e5b128c984e 100644
--- a/src/server/session.ts
+++ b/src/server/session.ts
@@ -1178,8 +1178,7 @@ namespace ts.server {
private getRenameInfo(args: protocol.FileLocationRequestArgs): RenameInfo {
const { file, project } = this.getFileAndProject(args);
const position = this.getPositionInFile(args, file);
- const preferences = this.getHostPreferences();
- return project.getLanguageService().getRenameInfo(file, position, { allowRenameOfImportPath: preferences.allowRenameOfImportPath });
+ return project.getLanguageService().getRenameInfo(file, position, { allowRenameOfImportPath: this.getPreferences(file).allowRenameOfImportPath });
}
private getProjects(args: protocol.FileRequestArgs, getScriptInfoEnsuringProjectsUptoDate?: boolean, ignoreNoProjectError?: boolean): Projects {
@@ -1234,12 +1233,12 @@ namespace ts.server {
{ fileName: args.file, pos: position },
!!args.findInStrings,
!!args.findInComments,
- this.getHostPreferences()
+ this.getPreferences(file)
);
if (!simplifiedResult) return locations;
const defaultProject = this.getDefaultProject(args);
- const renameInfo: protocol.RenameInfo = this.mapRenameInfo(defaultProject.getLanguageService().getRenameInfo(file, position, { allowRenameOfImportPath: this.getHostPreferences().allowRenameOfImportPath }), Debug.assertDefined(this.projectService.getScriptInfo(file)));
+ const renameInfo: protocol.RenameInfo = this.mapRenameInfo(defaultProject.getLanguageService().getRenameInfo(file, position, { allowRenameOfImportPath: this.getPreferences(file).allowRenameOfImportPath }), Debug.assertDefined(this.projectService.getScriptInfo(file)));
return { info: renameInfo, locs: this.toSpanGroups(locations) };
}
diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts
index 52f3277574e..f96c53ee200 100644
--- a/src/services/findAllReferences.ts
+++ b/src/services/findAllReferences.ts
@@ -41,6 +41,7 @@ namespace ts.FindAllReferences {
readonly implementations?: boolean;
/**
* True to opt in for enhanced renaming of shorthand properties and import/export specifiers.
+ * The options controls the behavior for the whole rename operation; it cannot be changed on a per-file basis.
* Default is false for backwards compatibility.
*/
readonly providePrefixAndSuffixTextForRename?: boolean;
diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts
index 98c29025d5f..376b7d16ec8 100644
--- a/src/testRunner/unittests/transform.ts
+++ b/src/testRunner/unittests/transform.ts
@@ -400,6 +400,46 @@ namespace Foo {
}
}).outputText;
});
+
+ // https://github.com/Microsoft/TypeScript/issues/24709
+ testBaseline("issue24709", () => {
+ const fs = vfs.createFromFileSystem(Harness.IO, /*caseSensitive*/ true);
+ const transformed = transform(createSourceFile("source.ts", "class X { echo(x: string) { return x; } }", ScriptTarget.ES3), [transformSourceFile]);
+ const transformedSourceFile = transformed.transformed[0];
+ transformed.dispose();
+ const host = new fakes.CompilerHost(fs);
+ host.getSourceFile = () => transformedSourceFile;
+ const program = createProgram(["source.ts"], {
+ target: ScriptTarget.ES3,
+ module: ModuleKind.None,
+ noLib: true
+ }, host);
+ program.emit(transformedSourceFile, (_p, s, b) => host.writeFile("source.js", s, b));
+ return host.readFile("source.js")!.toString();
+
+ function transformSourceFile(context: TransformationContext) {
+ const visitor: Visitor = (node) => {
+ if (isMethodDeclaration(node)) {
+ return updateMethod(
+ node,
+ node.decorators,
+ node.modifiers,
+ node.asteriskToken,
+ createIdentifier("foobar"),
+ node.questionToken,
+ node.typeParameters,
+ node.parameters,
+ node.type,
+ node.body,
+ );
+ }
+ return visitEachChild(node, visitor, context);
+ };
+ return (node: SourceFile) => visitNode(node, visitor);
+ }
+
+ });
+
});
}
diff --git a/src/testRunner/unittests/tsserver/rename.ts b/src/testRunner/unittests/tsserver/rename.ts
index 571db235a6e..f565524aded 100644
--- a/src/testRunner/unittests/tsserver/rename.ts
+++ b/src/testRunner/unittests/tsserver/rename.ts
@@ -7,6 +7,7 @@ namespace ts.projectSystem {
const session = createSession(createServerHost([aTs, bTs]));
openFilesForSession([bTs], session);
+ // rename fails with allowRenameOfImportPath disabled
const response1 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(bTs, 'a";'));
assert.deepEqual(response1, {
info: {
@@ -16,6 +17,7 @@ namespace ts.projectSystem {
locs: [{ file: bTs.path, locs: [protocolRenameSpanFromSubstring(bTs.content, "./a")] }],
});
+ // rename succeeds with allowRenameOfImportPath enabled in host
session.getProjectService().setHostConfiguration({ preferences: { allowRenameOfImportPath: true } });
const response2 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(bTs, 'a";'));
assert.deepEqual(response2, {
@@ -30,6 +32,23 @@ namespace ts.projectSystem {
},
locs: [{ file: bTs.path, locs: [protocolRenameSpanFromSubstring(bTs.content, "./a")] }],
});
+
+ // rename succeeds with allowRenameOfImportPath enabled in file
+ session.getProjectService().setHostConfiguration({ preferences: { allowRenameOfImportPath: false } });
+ session.getProjectService().setHostConfiguration({ file: "/b.ts", formatOptions: {}, preferences: { allowRenameOfImportPath: true } });
+ const response3 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(bTs, 'a";'));
+ assert.deepEqual(response3, {
+ info: {
+ canRename: true,
+ fileToRename: aTs.path,
+ displayName: aTs.path,
+ fullDisplayName: aTs.path,
+ kind: ScriptElementKind.moduleElement,
+ kindModifiers: "",
+ triggerSpan: protocolTextSpanFromSubstring(bTs.content, "a", { index: 1 }),
+ },
+ locs: [{ file: bTs.path, locs: [protocolRenameSpanFromSubstring(bTs.content, "./a")] }],
+ });
});
it("works with prefixText and suffixText when enabled", () => {
@@ -61,7 +80,7 @@ namespace ts.projectSystem {
],
});
- // rename with prefixText and suffixText enabled
+ // rename with prefixText and suffixText enabled in host
session.getProjectService().setHostConfiguration({ preferences: { providePrefixAndSuffixTextForRename: true } });
const response2 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(aTs, "x"));
assert.deepEqual(response2, {
@@ -84,6 +103,93 @@ namespace ts.projectSystem {
},
],
});
+
+ // rename with prefixText and suffixText enabled for file
+ session.getProjectService().setHostConfiguration({ preferences: { providePrefixAndSuffixTextForRename: false } });
+ session.getProjectService().setHostConfiguration({ file: "/a.ts", formatOptions: {}, preferences: { providePrefixAndSuffixTextForRename: true } });
+ const response3 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(aTs, "x"));
+ assert.deepEqual(response3, {
+ info: {
+ canRename: true,
+ fileToRename: undefined,
+ displayName: "x",
+ fullDisplayName: "x",
+ kind: ScriptElementKind.constElement,
+ kindModifiers: ScriptElementKindModifier.none,
+ triggerSpan: protocolTextSpanFromSubstring(aTs.content, "x"),
+ },
+ locs: [
+ {
+ file: aTs.path,
+ locs: [
+ protocolRenameSpanFromSubstring(aTs.content, "x"),
+ protocolRenameSpanFromSubstring(aTs.content, "x", { index: 1 }, { prefixText: "x: " }),
+ ],
+ },
+ ],
+ });
+ });
+
+ it("rename behavior is based on file of rename initiation", () => {
+ const aTs: File = { path: "/a.ts", content: "const x = 1; export { x };" };
+ const bTs: File = { path: "/b.ts", content: `import { x } from "./a"; const y = x + 1;` };
+ const host = createServerHost([aTs, bTs]);
+ const session = createSession(host);
+ openFilesForSession([aTs, bTs], session);
+
+ // rename from file with prefixText and suffixText enabled
+ session.getProjectService().setHostConfiguration({ file: "/a.ts", formatOptions: {}, preferences: { providePrefixAndSuffixTextForRename: true } });
+ const response1 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(aTs, "x"));
+ assert.deepEqual(response1, {
+ info: {
+ canRename: true,
+ fileToRename: undefined,
+ displayName: "x",
+ fullDisplayName: "x",
+ kind: ScriptElementKind.constElement,
+ kindModifiers: ScriptElementKindModifier.none,
+ triggerSpan: protocolTextSpanFromSubstring(aTs.content, "x"),
+ },
+ locs: [
+ {
+ file: aTs.path,
+ locs: [
+ protocolRenameSpanFromSubstring(aTs.content, "x"),
+ protocolRenameSpanFromSubstring(aTs.content, "x", { index: 2 }, { suffixText: " as x" }),
+ ],
+ },
+ ],
+ });
+
+ // rename from file with prefixText and suffixText disabled
+ const response2 = executeSessionRequest(session, protocol.CommandTypes.Rename, protocolFileLocationFromSubstring(bTs, "x"));
+ assert.deepEqual(response2, {
+ info: {
+ canRename: true,
+ fileToRename: undefined,
+ displayName: "x",
+ fullDisplayName: "x",
+ kind: ScriptElementKind.alias,
+ kindModifiers: ScriptElementKindModifier.none,
+ triggerSpan: protocolTextSpanFromSubstring(bTs.content, "x"),
+ },
+ locs: [
+ {
+ file: bTs.path,
+ locs: [
+ protocolRenameSpanFromSubstring(bTs.content, "x"),
+ protocolRenameSpanFromSubstring(bTs.content, "x", { index: 1 })
+ ]
+ },
+ {
+ file: aTs.path,
+ locs: [
+ protocolRenameSpanFromSubstring(aTs.content, "x"),
+ protocolRenameSpanFromSubstring(aTs.content, "x", { index: 2 }),
+ ],
+ },
+ ],
+ });
});
});
}
diff --git a/tests/baselines/reference/anonymousModules.errors.txt b/tests/baselines/reference/anonymousModules.errors.txt
index 24468352d03..b81513cfbbd 100644
--- a/tests/baselines/reference/anonymousModules.errors.txt
+++ b/tests/baselines/reference/anonymousModules.errors.txt
@@ -1,22 +1,22 @@
-tests/cases/compiler/anonymousModules.ts(1,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/anonymousModules.ts(1,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/anonymousModules.ts(1,8): error TS1005: ';' expected.
-tests/cases/compiler/anonymousModules.ts(4,2): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/anonymousModules.ts(4,2): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/anonymousModules.ts(4,9): error TS1005: ';' expected.
-tests/cases/compiler/anonymousModules.ts(10,2): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/anonymousModules.ts(10,2): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/anonymousModules.ts(10,9): error TS1005: ';' expected.
==== tests/cases/compiler/anonymousModules.ts (6 errors) ====
module {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
export var foo = 1;
module {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
export var bar = 1;
@@ -26,7 +26,7 @@ tests/cases/compiler/anonymousModules.ts(10,9): error TS1005: ';' expected.
module {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
var x = bar;
diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts
index 29bca8a21a3..2eb25821731 100644
--- a/tests/baselines/reference/api/tsserverlibrary.d.ts
+++ b/tests/baselines/reference/api/tsserverlibrary.d.ts
@@ -3401,6 +3401,7 @@ declare namespace ts {
function isNewExpression(node: Node): node is NewExpression;
function isTaggedTemplateExpression(node: Node): node is TaggedTemplateExpression;
function isTypeAssertion(node: Node): node is TypeAssertion;
+ function isConstTypeReference(node: Node): boolean;
function isParenthesizedExpression(node: Node): node is ParenthesizedExpression;
function skipPartiallyEmittedExpressions(node: Expression): Expression;
function skipPartiallyEmittedExpressions(node: Node): Node;
diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts
index b231a4ed01d..16a9b0a2e87 100644
--- a/tests/baselines/reference/api/typescript.d.ts
+++ b/tests/baselines/reference/api/typescript.d.ts
@@ -3401,6 +3401,7 @@ declare namespace ts {
function isNewExpression(node: Node): node is NewExpression;
function isTaggedTemplateExpression(node: Node): node is TaggedTemplateExpression;
function isTypeAssertion(node: Node): node is TypeAssertion;
+ function isConstTypeReference(node: Node): boolean;
function isParenthesizedExpression(node: Node): node is ParenthesizedExpression;
function skipPartiallyEmittedExpressions(node: Expression): Expression;
function skipPartiallyEmittedExpressions(node: Node): Node;
diff --git a/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt b/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt
index 717ed95a505..2f47712c9db 100644
--- a/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt
+++ b/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt
@@ -1,11 +1,11 @@
-tests/cases/conformance/salsa/bug24934.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/salsa/bug24934.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/conformance/salsa/bug24934.js (1 errors) ====
export function abc(a, b, c) { return 5; }
module.exports = { abc };
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/conformance/salsa/use.js (0 errors) ====
import { abc } from './bug24934';
abc(1, 2, 3);
diff --git a/tests/baselines/reference/constAssertions.errors.txt b/tests/baselines/reference/constAssertions.errors.txt
new file mode 100644
index 00000000000..24fce159901
--- /dev/null
+++ b/tests/baselines/reference/constAssertions.errors.txt
@@ -0,0 +1,79 @@
+tests/cases/conformance/expressions/typeAssertions/constAssertions.ts(44,32): error TS2540: Cannot assign to 'x' because it is a read-only property.
+tests/cases/conformance/expressions/typeAssertions/constAssertions.ts(61,10): error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+tests/cases/conformance/expressions/typeAssertions/constAssertions.ts(62,10): error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+tests/cases/conformance/expressions/typeAssertions/constAssertions.ts(63,10): error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+
+
+==== tests/cases/conformance/expressions/typeAssertions/constAssertions.ts (4 errors) ====
+ let v1 = 'abc' as const;
+ let v2 = `abc` as const;
+ let v3 = 10 as const;
+ let v4 = -10 as const;
+ let v5 = +10 as const;
+ let v6 = 10n as const;
+ let v7 = -10n as const;
+ let v8 = true as const;
+ let v9 = false as const;
+
+ let c1 = 'abc' as const;
+ let c2 = `abc` as const;
+ let c3 = 10 as const;
+ let c4 = -10 as const;
+ let c5 = +10 as const;
+ let c6 = 10n as const;
+ let c7 = -10n as const;
+ let c8 = true as const;
+ let c9 = false as const;
+
+ let vv1 = v1;
+ let vc1 = c1;
+
+ let a1 = [] as const;
+ let a2 = [1, 2, 3] as const;
+ let a3 = [10, 'hello', true] as const;
+ let a4 = [...[1, 2, 3]] as const;
+ let a5 = [1, 2, 3];
+ let a6 = [...a5] as const;
+ let a7 = [...a6];
+ let a8 = ['abc', ...a7] as const;
+ let a9 = [...a8];
+
+ declare let d: { [x: string]: string };
+
+ let o1 = { x: 10, y: 20 } as const;
+ let o2 = { a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const;
+ let o3 = { ...o1, ...o2 } as const;
+ let o4 = { a: 1, b: 2 };
+ let o5 = { ...o4 } as const;
+ let o6 = { ...o5 };
+ let o7 = { ...d } as const;
+ let o8 = { ...o7 };
+ let o9 = { x: 10, foo() { this.x = 20 } } as const; // Error
+ ~
+!!! error TS2540: Cannot assign to 'x' because it is a read-only property.
+
+ let p1 = (10) as const;
+ let p2 = ((-10)) as const;
+ let p3 = ([(10)]) as const;
+ let p4 = [[[[10]]]] as const;
+
+ let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } } as const;
+
+ let q1 = 10;
+ let q2 = 'abc';
+ let q3 = true;
+ let q4 = [1, 2, 3];
+ let q5 = { x: 10, y: 20 };
+
+ declare function id(x: T): T;
+
+ let e1 = v1 as const; // Error
+ ~~
+!!! error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+ let e2 = (true ? 1 : 0) as const; // Error
+ ~~~~~~~~~~~~~~
+!!! error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+ let e3 = id(1) as const; // Error
+ ~~~~~
+!!! error TS1355: A 'const' assertion can only be applied to a string, number, boolean, array, or object literal.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/constAssertions.js b/tests/baselines/reference/constAssertions.js
new file mode 100644
index 00000000000..9f173987d22
--- /dev/null
+++ b/tests/baselines/reference/constAssertions.js
@@ -0,0 +1,220 @@
+//// [constAssertions.ts]
+let v1 = 'abc' as const;
+let v2 = `abc` as const;
+let v3 = 10 as const;
+let v4 = -10 as const;
+let v5 = +10 as const;
+let v6 = 10n as const;
+let v7 = -10n as const;
+let v8 = true as const;
+let v9 = false as const;
+
+let c1 = 'abc' as const;
+let c2 = `abc` as const;
+let c3 = 10 as const;
+let c4 = -10 as const;
+let c5 = +10 as const;
+let c6 = 10n as const;
+let c7 = -10n as const;
+let c8 = true as const;
+let c9 = false as const;
+
+let vv1 = v1;
+let vc1 = c1;
+
+let a1 = [] as const;
+let a2 = [1, 2, 3] as const;
+let a3 = [10, 'hello', true] as const;
+let a4 = [...[1, 2, 3]] as const;
+let a5 = [1, 2, 3];
+let a6 = [...a5] as const;
+let a7 = [...a6];
+let a8 = ['abc', ...a7] as const;
+let a9 = [...a8];
+
+declare let d: { [x: string]: string };
+
+let o1 = { x: 10, y: 20 } as const;
+let o2 = { a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const;
+let o3 = { ...o1, ...o2 } as const;
+let o4 = { a: 1, b: 2 };
+let o5 = { ...o4 } as const;
+let o6 = { ...o5 };
+let o7 = { ...d } as const;
+let o8 = { ...o7 };
+let o9 = { x: 10, foo() { this.x = 20 } } as const; // Error
+
+let p1 = (10) as const;
+let p2 = ((-10)) as const;
+let p3 = ([(10)]) as const;
+let p4 = [[[[10]]]] as const;
+
+let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } } as const;
+
+let q1 = 10;
+let q2 = 'abc';
+let q3 = true;
+let q4 = [1, 2, 3];
+let q5 = { x: 10, y: 20 };
+
+declare function id(x: T): T;
+
+let e1 = v1 as const; // Error
+let e2 = (true ? 1 : 0) as const; // Error
+let e3 = id(1) as const; // Error
+
+
+//// [constAssertions.js]
+"use strict";
+let v1 = 'abc';
+let v2 = `abc`;
+let v3 = 10;
+let v4 = -10;
+let v5 = +10;
+let v6 = 10n;
+let v7 = -10n;
+let v8 = true;
+let v9 = false;
+let c1 = 'abc';
+let c2 = `abc`;
+let c3 = 10;
+let c4 = -10;
+let c5 = +10;
+let c6 = 10n;
+let c7 = -10n;
+let c8 = true;
+let c9 = false;
+let vv1 = v1;
+let vc1 = c1;
+let a1 = [];
+let a2 = [1, 2, 3];
+let a3 = [10, 'hello', true];
+let a4 = [...[1, 2, 3]];
+let a5 = [1, 2, 3];
+let a6 = [...a5];
+let a7 = [...a6];
+let a8 = ['abc', ...a7];
+let a9 = [...a8];
+let o1 = { x: 10, y: 20 };
+let o2 = { a: 1, 'b': 2, ['c']: 3, d() { }, ['e' + '']: 4 };
+let o3 = { ...o1, ...o2 };
+let o4 = { a: 1, b: 2 };
+let o5 = { ...o4 };
+let o6 = { ...o5 };
+let o7 = { ...d };
+let o8 = { ...o7 };
+let o9 = { x: 10, foo() { this.x = 20; } }; // Error
+let p1 = (10);
+let p2 = ((-10));
+let p3 = ([(10)]);
+let p4 = [[[[10]]]];
+let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } };
+let q1 = 10;
+let q2 = 'abc';
+let q3 = true;
+let q4 = [1, 2, 3];
+let q5 = { x: 10, y: 20 };
+let e1 = v1; // Error
+let e2 = (true ? 1 : 0); // Error
+let e3 = id(1); // Error
+
+
+//// [constAssertions.d.ts]
+declare let v1: "abc";
+declare let v2: "abc";
+declare let v3: 10;
+declare let v4: -10;
+declare let v5: 10;
+declare let v6: 10n;
+declare let v7: -10n;
+declare let v8: true;
+declare let v9: false;
+declare let c1: "abc";
+declare let c2: "abc";
+declare let c3: 10;
+declare let c4: -10;
+declare let c5: 10;
+declare let c6: 10n;
+declare let c7: -10n;
+declare let c8: true;
+declare let c9: false;
+declare let vv1: "abc";
+declare let vc1: "abc";
+declare let a1: readonly [];
+declare let a2: readonly [1, 2, 3];
+declare let a3: readonly [10, "hello", true];
+declare let a4: readonly (1 | 2 | 3)[];
+declare let a5: number[];
+declare let a6: readonly number[];
+declare let a7: number[];
+declare let a8: readonly ["abc", ...number[]];
+declare let a9: (number | "abc")[];
+declare let d: {
+ [x: string]: string;
+};
+declare let o1: {
+ readonly x: 10;
+ readonly y: 20;
+};
+declare let o2: {
+ readonly [x: string]: 1 | 2 | 3 | (() => void) | 4;
+ readonly a: 1;
+ readonly 'b': 2;
+ readonly ['c']: 3;
+ readonly d: () => void;
+};
+declare let o3: {
+ readonly a: 1;
+ readonly 'b': 2;
+ readonly ['c']: 3;
+ readonly d: () => void;
+ readonly x: 10;
+ readonly y: 20;
+};
+declare let o4: {
+ a: number;
+ b: number;
+};
+declare let o5: {
+ readonly a: number;
+ readonly b: number;
+};
+declare let o6: {
+ a: number;
+ b: number;
+};
+declare let o7: {
+ readonly [x: string]: string;
+};
+declare let o8: {
+ [x: string]: string;
+};
+declare let o9: {
+ readonly x: 10;
+ readonly foo: () => void;
+};
+declare let p1: 10;
+declare let p2: -10;
+declare let p3: readonly [10];
+declare let p4: readonly [readonly [readonly [readonly [10]]]];
+declare let x1: {
+ readonly x: 10;
+ readonly y: readonly [20, 30];
+ z: {
+ a: {
+ readonly b: 42;
+ };
+ };
+};
+declare let q1: 10;
+declare let q2: "abc";
+declare let q3: true;
+declare let q4: readonly [1, 2, 3];
+declare let q5: {
+ readonly x: 10;
+ readonly y: 20;
+};
+declare function id(x: T): T;
+declare let e1: "abc";
+declare let e2: 0 | 1;
+declare let e3: 1;
diff --git a/tests/baselines/reference/constAssertions.symbols b/tests/baselines/reference/constAssertions.symbols
new file mode 100644
index 00000000000..598210f42b3
--- /dev/null
+++ b/tests/baselines/reference/constAssertions.symbols
@@ -0,0 +1,201 @@
+=== tests/cases/conformance/expressions/typeAssertions/constAssertions.ts ===
+let v1 = 'abc' as const;
+>v1 : Symbol(v1, Decl(constAssertions.ts, 0, 3))
+
+let v2 = `abc` as const;
+>v2 : Symbol(v2, Decl(constAssertions.ts, 1, 3))
+
+let v3 = 10 as const;
+>v3 : Symbol(v3, Decl(constAssertions.ts, 2, 3))
+
+let v4 = -10 as const;
+>v4 : Symbol(v4, Decl(constAssertions.ts, 3, 3))
+
+let v5 = +10 as const;
+>v5 : Symbol(v5, Decl(constAssertions.ts, 4, 3))
+
+let v6 = 10n as const;
+>v6 : Symbol(v6, Decl(constAssertions.ts, 5, 3))
+
+let v7 = -10n as const;
+>v7 : Symbol(v7, Decl(constAssertions.ts, 6, 3))
+
+let v8 = true as const;
+>v8 : Symbol(v8, Decl(constAssertions.ts, 7, 3))
+
+let v9 = false as const;
+>v9 : Symbol(v9, Decl(constAssertions.ts, 8, 3))
+
+let c1 = 'abc' as const;
+>c1 : Symbol(c1, Decl(constAssertions.ts, 10, 3))
+
+let c2 = `abc` as const;
+>c2 : Symbol(c2, Decl(constAssertions.ts, 11, 3))
+
+let c3 = 10 as const;
+>c3 : Symbol(c3, Decl(constAssertions.ts, 12, 3))
+
+let c4 = -10 as const;
+>c4 : Symbol(c4, Decl(constAssertions.ts, 13, 3))
+
+let c5 = +10 as const;
+>c5 : Symbol(c5, Decl(constAssertions.ts, 14, 3))
+
+let c6 = 10n as const;
+>c6 : Symbol(c6, Decl(constAssertions.ts, 15, 3))
+
+let c7 = -10n as const;
+>c7 : Symbol(c7, Decl(constAssertions.ts, 16, 3))
+
+let c8 = true as const;
+>c8 : Symbol(c8, Decl(constAssertions.ts, 17, 3))
+
+let c9 = false as const;
+>c9 : Symbol(c9, Decl(constAssertions.ts, 18, 3))
+
+let vv1 = v1;
+>vv1 : Symbol(vv1, Decl(constAssertions.ts, 20, 3))
+>v1 : Symbol(v1, Decl(constAssertions.ts, 0, 3))
+
+let vc1 = c1;
+>vc1 : Symbol(vc1, Decl(constAssertions.ts, 21, 3))
+>c1 : Symbol(c1, Decl(constAssertions.ts, 10, 3))
+
+let a1 = [] as const;
+>a1 : Symbol(a1, Decl(constAssertions.ts, 23, 3))
+
+let a2 = [1, 2, 3] as const;
+>a2 : Symbol(a2, Decl(constAssertions.ts, 24, 3))
+
+let a3 = [10, 'hello', true] as const;
+>a3 : Symbol(a3, Decl(constAssertions.ts, 25, 3))
+
+let a4 = [...[1, 2, 3]] as const;
+>a4 : Symbol(a4, Decl(constAssertions.ts, 26, 3))
+
+let a5 = [1, 2, 3];
+>a5 : Symbol(a5, Decl(constAssertions.ts, 27, 3))
+
+let a6 = [...a5] as const;
+>a6 : Symbol(a6, Decl(constAssertions.ts, 28, 3))
+>a5 : Symbol(a5, Decl(constAssertions.ts, 27, 3))
+
+let a7 = [...a6];
+>a7 : Symbol(a7, Decl(constAssertions.ts, 29, 3))
+>a6 : Symbol(a6, Decl(constAssertions.ts, 28, 3))
+
+let a8 = ['abc', ...a7] as const;
+>a8 : Symbol(a8, Decl(constAssertions.ts, 30, 3))
+>a7 : Symbol(a7, Decl(constAssertions.ts, 29, 3))
+
+let a9 = [...a8];
+>a9 : Symbol(a9, Decl(constAssertions.ts, 31, 3))
+>a8 : Symbol(a8, Decl(constAssertions.ts, 30, 3))
+
+declare let d: { [x: string]: string };
+>d : Symbol(d, Decl(constAssertions.ts, 33, 11))
+>x : Symbol(x, Decl(constAssertions.ts, 33, 18))
+
+let o1 = { x: 10, y: 20 } as const;
+>o1 : Symbol(o1, Decl(constAssertions.ts, 35, 3))
+>x : Symbol(x, Decl(constAssertions.ts, 35, 10))
+>y : Symbol(y, Decl(constAssertions.ts, 35, 17))
+
+let o2 = { a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const;
+>o2 : Symbol(o2, Decl(constAssertions.ts, 36, 3))
+>a : Symbol(a, Decl(constAssertions.ts, 36, 10))
+>'b' : Symbol('b', Decl(constAssertions.ts, 36, 16))
+>['c'] : Symbol(['c'], Decl(constAssertions.ts, 36, 24))
+>'c' : Symbol(['c'], Decl(constAssertions.ts, 36, 24))
+>d : Symbol(d, Decl(constAssertions.ts, 36, 34))
+>['e' + ''] : Symbol(['e' + ''], Decl(constAssertions.ts, 36, 42))
+
+let o3 = { ...o1, ...o2 } as const;
+>o3 : Symbol(o3, Decl(constAssertions.ts, 37, 3))
+>o1 : Symbol(o1, Decl(constAssertions.ts, 35, 3))
+>o2 : Symbol(o2, Decl(constAssertions.ts, 36, 3))
+
+let o4 = { a: 1, b: 2 };
+>o4 : Symbol(o4, Decl(constAssertions.ts, 38, 3))
+>a : Symbol(a, Decl(constAssertions.ts, 38, 10))
+>b : Symbol(b, Decl(constAssertions.ts, 38, 16))
+
+let o5 = { ...o4 } as const;
+>o5 : Symbol(o5, Decl(constAssertions.ts, 39, 3))
+>o4 : Symbol(o4, Decl(constAssertions.ts, 38, 3))
+
+let o6 = { ...o5 };
+>o6 : Symbol(o6, Decl(constAssertions.ts, 40, 3))
+>o5 : Symbol(o5, Decl(constAssertions.ts, 39, 3))
+
+let o7 = { ...d } as const;
+>o7 : Symbol(o7, Decl(constAssertions.ts, 41, 3))
+>d : Symbol(d, Decl(constAssertions.ts, 33, 11))
+
+let o8 = { ...o7 };
+>o8 : Symbol(o8, Decl(constAssertions.ts, 42, 3))
+>o7 : Symbol(o7, Decl(constAssertions.ts, 41, 3))
+
+let o9 = { x: 10, foo() { this.x = 20 } } as const; // Error
+>o9 : Symbol(o9, Decl(constAssertions.ts, 43, 3))
+>x : Symbol(x, Decl(constAssertions.ts, 43, 10))
+>foo : Symbol(foo, Decl(constAssertions.ts, 43, 17))
+>this.x : Symbol(x, Decl(constAssertions.ts, 43, 10))
+>this : Symbol(__object, Decl(constAssertions.ts, 43, 8))
+>x : Symbol(x, Decl(constAssertions.ts, 43, 10))
+
+let p1 = (10) as const;
+>p1 : Symbol(p1, Decl(constAssertions.ts, 45, 3))
+
+let p2 = ((-10)) as const;
+>p2 : Symbol(p2, Decl(constAssertions.ts, 46, 3))
+
+let p3 = ([(10)]) as const;
+>p3 : Symbol(p3, Decl(constAssertions.ts, 47, 3))
+
+let p4 = [[[[10]]]] as const;
+>p4 : Symbol(p4, Decl(constAssertions.ts, 48, 3))
+
+let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } } as const;
+>x1 : Symbol(x1, Decl(constAssertions.ts, 50, 3))
+>x : Symbol(x, Decl(constAssertions.ts, 50, 10))
+>y : Symbol(y, Decl(constAssertions.ts, 50, 17))
+>z : Symbol(z, Decl(constAssertions.ts, 50, 30))
+>a : Symbol(a, Decl(constAssertions.ts, 50, 35))
+>b : Symbol(b, Decl(constAssertions.ts, 50, 40))
+
+let q1 = 10;
+>q1 : Symbol(q1, Decl(constAssertions.ts, 52, 3))
+
+let q2 = 'abc';
+>q2 : Symbol(q2, Decl(constAssertions.ts, 53, 3))
+
+let q3 = true;
+>q3 : Symbol(q3, Decl(constAssertions.ts, 54, 3))
+
+let q4 = [1, 2, 3];
+>q4 : Symbol(q4, Decl(constAssertions.ts, 55, 3))
+
+let q5 = { x: 10, y: 20 };
+>q5 : Symbol(q5, Decl(constAssertions.ts, 56, 3))
+>x : Symbol(x, Decl(constAssertions.ts, 56, 18))
+>y : Symbol(y, Decl(constAssertions.ts, 56, 25))
+
+declare function id(x: T): T;
+>id : Symbol(id, Decl(constAssertions.ts, 56, 34))
+>T : Symbol(T, Decl(constAssertions.ts, 58, 20))
+>x : Symbol(x, Decl(constAssertions.ts, 58, 23))
+>T : Symbol(T, Decl(constAssertions.ts, 58, 20))
+>T : Symbol(T, Decl(constAssertions.ts, 58, 20))
+
+let e1 = v1 as const; // Error
+>e1 : Symbol(e1, Decl(constAssertions.ts, 60, 3))
+>v1 : Symbol(v1, Decl(constAssertions.ts, 0, 3))
+
+let e2 = (true ? 1 : 0) as const; // Error
+>e2 : Symbol(e2, Decl(constAssertions.ts, 61, 3))
+
+let e3 = id(1) as const; // Error
+>e3 : Symbol(e3, Decl(constAssertions.ts, 62, 3))
+>id : Symbol(id, Decl(constAssertions.ts, 56, 34))
+
diff --git a/tests/baselines/reference/constAssertions.types b/tests/baselines/reference/constAssertions.types
new file mode 100644
index 00000000000..b1f90df15f0
--- /dev/null
+++ b/tests/baselines/reference/constAssertions.types
@@ -0,0 +1,356 @@
+=== tests/cases/conformance/expressions/typeAssertions/constAssertions.ts ===
+let v1 = 'abc' as const;
+>v1 : "abc"
+>'abc' as const : "abc"
+>'abc' : "abc"
+
+let v2 = `abc` as const;
+>v2 : "abc"
+>`abc` as const : "abc"
+>`abc` : "abc"
+
+let v3 = 10 as const;
+>v3 : 10
+>10 as const : 10
+>10 : 10
+
+let v4 = -10 as const;
+>v4 : -10
+>-10 as const : -10
+>-10 : -10
+>10 : 10
+
+let v5 = +10 as const;
+>v5 : 10
+>+10 as const : 10
+>+10 : 10
+>10 : 10
+
+let v6 = 10n as const;
+>v6 : 10n
+>10n as const : 10n
+>10n : 10n
+
+let v7 = -10n as const;
+>v7 : -10n
+>-10n as const : -10n
+>-10n : -10n
+>10n : 10n
+
+let v8 = true as const;
+>v8 : true
+>true as const : true
+>true : true
+
+let v9 = false as const;
+>v9 : false
+>false as const : false
+>false : false
+
+let c1 = 'abc' as const;
+>c1 : "abc"
+>'abc' as const : "abc"
+>'abc' : "abc"
+
+let c2 = `abc` as const;
+>c2 : "abc"
+>`abc` as const : "abc"
+>`abc` : "abc"
+
+let c3 = 10 as const;
+>c3 : 10
+>10 as const : 10
+>10 : 10
+
+let c4 = -10 as const;
+>c4 : -10
+>-10 as const : -10
+>-10 : -10
+>10 : 10
+
+let c5 = +10 as const;
+>c5 : 10
+>+10 as const : 10
+>+10 : 10
+>10 : 10
+
+let c6 = 10n as const;
+>c6 : 10n
+>10n as const : 10n
+>10n : 10n
+
+let c7 = -10n as const;
+>c7 : -10n
+>-10n as const : -10n
+>-10n : -10n
+>10n : 10n
+
+let c8 = true as const;
+>c8 : true
+>true as const : true
+>true : true
+
+let c9 = false as const;
+>c9 : false
+>false as const : false
+>false : false
+
+let vv1 = v1;
+>vv1 : "abc"
+>v1 : "abc"
+
+let vc1 = c1;
+>vc1 : "abc"
+>c1 : "abc"
+
+let a1 = [] as const;
+>a1 : readonly []
+>[] as const : readonly []
+>[] : readonly []
+
+let a2 = [1, 2, 3] as const;
+>a2 : readonly [1, 2, 3]
+>[1, 2, 3] as const : readonly [1, 2, 3]
+>[1, 2, 3] : readonly [1, 2, 3]
+>1 : 1
+>2 : 2
+>3 : 3
+
+let a3 = [10, 'hello', true] as const;
+>a3 : readonly [10, "hello", true]
+>[10, 'hello', true] as const : readonly [10, "hello", true]
+>[10, 'hello', true] : readonly [10, "hello", true]
+>10 : 10
+>'hello' : "hello"
+>true : true
+
+let a4 = [...[1, 2, 3]] as const;
+>a4 : readonly (1 | 2 | 3)[]
+>[...[1, 2, 3]] as const : readonly (1 | 2 | 3)[]
+>[...[1, 2, 3]] : readonly (1 | 2 | 3)[]
+>...[1, 2, 3] : 1 | 2 | 3
+>[1, 2, 3] : readonly [1, 2, 3]
+>1 : 1
+>2 : 2
+>3 : 3
+
+let a5 = [1, 2, 3];
+>a5 : number[]
+>[1, 2, 3] : number[]
+>1 : 1
+>2 : 2
+>3 : 3
+
+let a6 = [...a5] as const;
+>a6 : readonly number[]
+>[...a5] as const : readonly number[]
+>[...a5] : readonly number[]
+>...a5 : number
+>a5 : number[]
+
+let a7 = [...a6];
+>a7 : number[]
+>[...a6] : number[]
+>...a6 : number
+>a6 : readonly number[]
+
+let a8 = ['abc', ...a7] as const;
+>a8 : readonly ["abc", ...number[]]
+>['abc', ...a7] as const : readonly ["abc", ...number[]]
+>['abc', ...a7] : readonly ["abc", ...number[]]
+>'abc' : "abc"
+>...a7 : number
+>a7 : number[]
+
+let a9 = [...a8];
+>a9 : (number | "abc")[]
+>[...a8] : (number | "abc")[]
+>...a8 : number | "abc"
+>a8 : readonly ["abc", ...number[]]
+
+declare let d: { [x: string]: string };
+>d : { [x: string]: string; }
+>x : string
+
+let o1 = { x: 10, y: 20 } as const;
+>o1 : { readonly x: 10; readonly y: 20; }
+>{ x: 10, y: 20 } as const : { readonly x: 10; readonly y: 20; }
+>{ x: 10, y: 20 } : { readonly x: 10; readonly y: 20; }
+>x : 10
+>10 : 10
+>y : 20
+>20 : 20
+
+let o2 = { a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const;
+>o2 : { readonly [x: string]: 1 | 2 | 3 | (() => void) | 4; readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; }
+>{ a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const : { readonly [x: string]: 1 | 2 | 3 | (() => void) | 4; readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; }
+>{ a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } : { readonly [x: string]: 1 | 2 | 3 | (() => void) | 4; readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; }
+>a : 1
+>1 : 1
+>'b' : 2
+>2 : 2
+>['c'] : 3
+>'c' : "c"
+>3 : 3
+>d : () => void
+>['e' + ''] : 4
+>'e' + '' : string
+>'e' : "e"
+>'' : ""
+>4 : 4
+
+let o3 = { ...o1, ...o2 } as const;
+>o3 : { readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; readonly x: 10; readonly y: 20; }
+>{ ...o1, ...o2 } as const : { readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; readonly x: 10; readonly y: 20; }
+>{ ...o1, ...o2 } : { readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; readonly x: 10; readonly y: 20; }
+>o1 : { readonly x: 10; readonly y: 20; }
+>o2 : { readonly [x: string]: 1 | 2 | 3 | (() => void) | 4; readonly a: 1; readonly 'b': 2; readonly ['c']: 3; readonly d: () => void; }
+
+let o4 = { a: 1, b: 2 };
+>o4 : { a: number; b: number; }
+>{ a: 1, b: 2 } : { a: number; b: number; }
+>a : number
+>1 : 1
+>b : number
+>2 : 2
+
+let o5 = { ...o4 } as const;
+>o5 : { readonly a: number; readonly b: number; }
+>{ ...o4 } as const : { readonly a: number; readonly b: number; }
+>{ ...o4 } : { readonly a: number; readonly b: number; }
+>o4 : { a: number; b: number; }
+
+let o6 = { ...o5 };
+>o6 : { a: number; b: number; }
+>{ ...o5 } : { a: number; b: number; }
+>o5 : { readonly a: number; readonly b: number; }
+
+let o7 = { ...d } as const;
+>o7 : { readonly [x: string]: string; }
+>{ ...d } as const : { readonly [x: string]: string; }
+>{ ...d } : { readonly [x: string]: string; }
+>d : { [x: string]: string; }
+
+let o8 = { ...o7 };
+>o8 : { [x: string]: string; }
+>{ ...o7 } : { [x: string]: string; }
+>o7 : { readonly [x: string]: string; }
+
+let o9 = { x: 10, foo() { this.x = 20 } } as const; // Error
+>o9 : { readonly x: 10; readonly foo: () => void; }
+>{ x: 10, foo() { this.x = 20 } } as const : { readonly x: 10; readonly foo: () => void; }
+>{ x: 10, foo() { this.x = 20 } } : { readonly x: 10; readonly foo: () => void; }
+>x : 10
+>10 : 10
+>foo : () => void
+>this.x = 20 : 20
+>this.x : any
+>this : { readonly x: 10; readonly foo: () => void; }
+>x : any
+>20 : 20
+
+let p1 = (10) as const;
+>p1 : 10
+>(10) as const : 10
+>(10) : 10
+>10 : 10
+
+let p2 = ((-10)) as const;
+>p2 : -10
+>((-10)) as const : -10
+>((-10)) : -10
+>(-10) : -10
+>-10 : -10
+>10 : 10
+
+let p3 = ([(10)]) as const;
+>p3 : readonly [10]
+>([(10)]) as const : readonly [10]
+>([(10)]) : readonly [10]
+>[(10)] : readonly [10]
+>(10) : 10
+>10 : 10
+
+let p4 = [[[[10]]]] as const;
+>p4 : readonly [readonly [readonly [readonly [10]]]]
+>[[[[10]]]] as const : readonly [readonly [readonly [readonly [10]]]]
+>[[[[10]]]] : readonly [readonly [readonly [readonly [10]]]]
+>[[[10]]] : readonly [readonly [readonly [10]]]
+>[[10]] : readonly [readonly [10]]
+>[10] : readonly [10]
+>10 : 10
+
+let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } } as const;
+>x1 : { readonly x: 10; readonly y: readonly [20, 30]; z: { a: { readonly b: 42; }; }; }
+>{ x: 10, y: [20, 30], z: { a: { b: 42 } } } as const : { readonly x: 10; readonly y: readonly [20, 30]; readonly z: { readonly a: { readonly b: 42; }; }; }
+>{ x: 10, y: [20, 30], z: { a: { b: 42 } } } : { readonly x: 10; readonly y: readonly [20, 30]; readonly z: { readonly a: { readonly b: 42; }; }; }
+>x : 10
+>10 : 10
+>y : readonly [20, 30]
+>[20, 30] : readonly [20, 30]
+>20 : 20
+>30 : 30
+>z : { readonly a: { readonly b: 42; }; }
+>{ a: { b: 42 } } : { readonly a: { readonly b: 42; }; }
+>a : { readonly b: 42; }
+>{ b: 42 } : { readonly b: 42; }
+>b : 42
+>42 : 42
+
+let q1 = 10;
+>q1 : 10
+> 10 : 10
+>10 : 10
+
+let q2 = 'abc';
+>q2 : "abc"
+> 'abc' : "abc"
+>'abc' : "abc"
+
+let q3 = true;
+>q3 : true
+> true : true
+>true : true
+
+let q4 = [1, 2, 3];
+>q4 : readonly [1, 2, 3]
+> [1, 2, 3] : readonly [1, 2, 3]
+>[1, 2, 3] : readonly [1, 2, 3]
+>1 : 1
+>2 : 2
+>3 : 3
+
+let q5 = { x: 10, y: 20 };
+>q5 : { readonly x: 10; readonly y: 20; }
+> { x: 10, y: 20 } : { readonly x: 10; readonly y: 20; }
+>{ x: 10, y: 20 } : { readonly x: 10; readonly y: 20; }
+>x : 10
+>10 : 10
+>y : 20
+>20 : 20
+
+declare function id(x: T): T;
+>id : (x: T) => T
+>x : T
+
+let e1 = v1 as const; // Error
+>e1 : "abc"
+>v1 as const : "abc"
+>v1 : "abc"
+
+let e2 = (true ? 1 : 0) as const; // Error
+>e2 : 0 | 1
+>(true ? 1 : 0) as const : 0 | 1
+>(true ? 1 : 0) : 0 | 1
+>true ? 1 : 0 : 0 | 1
+>true : true
+>1 : 1
+>0 : 0
+
+let e3 = id(1) as const; // Error
+>e3 : 1
+>id(1) as const : 1
+>id(1) : 1
+>id : (x: T) => T
+>1 : 1
+
diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt
index 2fbd47409dd..07a11fafd33 100644
--- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt
+++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt
@@ -1,5 +1,5 @@
tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(11,13): error TS2503: Cannot find namespace 'module'.
-tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(11,13): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(11,13): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(11,19): error TS1005: ';' expected.
tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(22,35): error TS1005: ')' expected.
tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(22,39): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
@@ -105,7 +105,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS
~~~~~~
!!! error TS2503: Cannot find namespace 'module'.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
diff --git a/tests/baselines/reference/contextuallyTypedParametersWithInitializers.errors.txt b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.errors.txt
new file mode 100644
index 00000000000..61bb8b765b6
--- /dev/null
+++ b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.errors.txt
@@ -0,0 +1,42 @@
+tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts(8,29): error TS7031: Binding element 'foo' implicitly has an 'any' type.
+tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts(14,27): error TS7006: Parameter 'foo' implicitly has an 'any' type.
+tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts(27,42): error TS7031: Binding element 'foo' implicitly has an 'any' type.
+
+
+==== tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts (3 errors) ====
+ declare function id1(input: T): T;
+ declare function id2 any>(input: T): T;
+ declare function id3 any>(input: T): T;
+ declare function id4 any>(input: T): T;
+ declare function id5 any>(input: T): T;
+
+ const f10 = function ({ foo = 42 }) { return foo };
+ const f11 = id1(function ({ foo = 42 }) { return foo }); // Implicit any error
+ ~~~
+!!! error TS7031: Binding element 'foo' implicitly has an 'any' type.
+ const f12 = id2(function ({ foo = 42 }) { return foo });
+ const f13 = id3(function ({ foo = 42 }) { return foo });
+ const f14 = id4(function ({ foo = 42 }) { return foo });
+
+ const f20 = function (foo = 42) { return foo };
+ const f21 = id1(function (foo = 42) { return foo }); // Implicit any error
+ ~~~~~~~~
+!!! error TS7006: Parameter 'foo' implicitly has an 'any' type.
+ const f22 = id2(function (foo = 42) { return foo });
+ const f25 = id5(function (foo = 42) { return foo });
+
+ // Repro from #28816
+
+ function id(input: T): T { return input }
+
+ function getFoo ({ foo = 42 }) {
+ return foo;
+ }
+
+ const newGetFoo = id(getFoo);
+ const newGetFoo2 = id(function getFoo ({ foo = 42 }) {
+ ~~~
+!!! error TS7031: Binding element 'foo' implicitly has an 'any' type.
+ return foo;
+ });
+
\ No newline at end of file
diff --git a/tests/baselines/reference/contextuallyTypedParametersWithInitializers.js b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.js
new file mode 100644
index 00000000000..96b55c43157
--- /dev/null
+++ b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.js
@@ -0,0 +1,114 @@
+//// [contextuallyTypedParametersWithInitializers.ts]
+declare function id1(input: T): T;
+declare function id2 any>(input: T): T;
+declare function id3 any>(input: T): T;
+declare function id4 any>(input: T): T;
+declare function id5 any>(input: T): T;
+
+const f10 = function ({ foo = 42 }) { return foo };
+const f11 = id1(function ({ foo = 42 }) { return foo }); // Implicit any error
+const f12 = id2(function ({ foo = 42 }) { return foo });
+const f13 = id3(function ({ foo = 42 }) { return foo });
+const f14 = id4(function ({ foo = 42 }) { return foo });
+
+const f20 = function (foo = 42) { return foo };
+const f21 = id1(function (foo = 42) { return foo }); // Implicit any error
+const f22 = id2(function (foo = 42) { return foo });
+const f25 = id5(function (foo = 42) { return foo });
+
+// Repro from #28816
+
+function id(input: T): T { return input }
+
+function getFoo ({ foo = 42 }) {
+ return foo;
+}
+
+const newGetFoo = id(getFoo);
+const newGetFoo2 = id(function getFoo ({ foo = 42 }) {
+ return foo;
+});
+
+
+//// [contextuallyTypedParametersWithInitializers.js]
+"use strict";
+var f10 = function (_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+};
+var f11 = id1(function (_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+}); // Implicit any error
+var f12 = id2(function (_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+});
+var f13 = id3(function (_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+});
+var f14 = id4(function (_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+});
+var f20 = function (foo) {
+ if (foo === void 0) { foo = 42; }
+ return foo;
+};
+var f21 = id1(function (foo) {
+ if (foo === void 0) { foo = 42; }
+ return foo;
+}); // Implicit any error
+var f22 = id2(function (foo) {
+ if (foo === void 0) { foo = 42; }
+ return foo;
+});
+var f25 = id5(function (foo) {
+ if (foo === void 0) { foo = 42; }
+ return foo;
+});
+// Repro from #28816
+function id(input) { return input; }
+function getFoo(_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+}
+var newGetFoo = id(getFoo);
+var newGetFoo2 = id(function getFoo(_a) {
+ var _b = _a.foo, foo = _b === void 0 ? 42 : _b;
+ return foo;
+});
+
+
+//// [contextuallyTypedParametersWithInitializers.d.ts]
+declare function id1(input: T): T;
+declare function id2 any>(input: T): T;
+declare function id3 any>(input: T): T;
+declare function id4 any>(input: T): T;
+declare function id5 any>(input: T): T;
+declare const f10: ({ foo }: {
+ foo?: number | undefined;
+}) => number;
+declare const f11: ({ foo }: any) => any;
+declare const f12: ({ foo }: any) => any;
+declare const f13: ({ foo }: {
+ foo: any;
+}) => any;
+declare const f14: ({ foo }: {
+ foo?: number | undefined;
+}) => number;
+declare const f20: (foo?: number) => number;
+declare const f21: (foo?: any) => any;
+declare const f22: (foo?: any) => any;
+declare const f25: (foo?: number | undefined) => number;
+declare function id(input: T): T;
+declare function getFoo({ foo }: {
+ foo?: number | undefined;
+}): number;
+declare const newGetFoo: typeof getFoo;
+declare const newGetFoo2: ({ foo }: any) => any;
diff --git a/tests/baselines/reference/contextuallyTypedParametersWithInitializers.symbols b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.symbols
new file mode 100644
index 00000000000..6932f7b0cb8
--- /dev/null
+++ b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.symbols
@@ -0,0 +1,128 @@
+=== tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts ===
+declare function id1(input: T): T;
+>id1 : Symbol(id1, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 0))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 21))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 24))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 21))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 21))
+
+declare function id2 any>(input: T): T;
+>id2 : Symbol(id2, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 37))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 21))
+>x : Symbol(x, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 32))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 48))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 21))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 21))
+
+declare function id3 any>(input: T): T;
+>id3 : Symbol(id3, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 61))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 21))
+>x : Symbol(x, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 32))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 36))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 57))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 21))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 21))
+
+declare function id4 any>(input: T): T;
+>id4 : Symbol(id4, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 70))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 21))
+>x : Symbol(x, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 32))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 36))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 61))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 21))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 21))
+
+declare function id5 any>(input: T): T;
+>id5 : Symbol(id5, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 74))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 4, 21))
+>x : Symbol(x, Decl(contextuallyTypedParametersWithInitializers.ts, 4, 32))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 4, 52))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 4, 21))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 4, 21))
+
+const f10 = function ({ foo = 42 }) { return foo };
+>f10 : Symbol(f10, Decl(contextuallyTypedParametersWithInitializers.ts, 6, 5))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 6, 23))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 6, 23))
+
+const f11 = id1(function ({ foo = 42 }) { return foo }); // Implicit any error
+>f11 : Symbol(f11, Decl(contextuallyTypedParametersWithInitializers.ts, 7, 5))
+>id1 : Symbol(id1, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 0))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 7, 27))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 7, 27))
+
+const f12 = id2(function ({ foo = 42 }) { return foo });
+>f12 : Symbol(f12, Decl(contextuallyTypedParametersWithInitializers.ts, 8, 5))
+>id2 : Symbol(id2, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 37))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 8, 27))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 8, 27))
+
+const f13 = id3(function ({ foo = 42 }) { return foo });
+>f13 : Symbol(f13, Decl(contextuallyTypedParametersWithInitializers.ts, 9, 5))
+>id3 : Symbol(id3, Decl(contextuallyTypedParametersWithInitializers.ts, 1, 61))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 9, 27))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 9, 27))
+
+const f14 = id4(function ({ foo = 42 }) { return foo });
+>f14 : Symbol(f14, Decl(contextuallyTypedParametersWithInitializers.ts, 10, 5))
+>id4 : Symbol(id4, Decl(contextuallyTypedParametersWithInitializers.ts, 2, 70))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 10, 27))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 10, 27))
+
+const f20 = function (foo = 42) { return foo };
+>f20 : Symbol(f20, Decl(contextuallyTypedParametersWithInitializers.ts, 12, 5))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 12, 22))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 12, 22))
+
+const f21 = id1(function (foo = 42) { return foo }); // Implicit any error
+>f21 : Symbol(f21, Decl(contextuallyTypedParametersWithInitializers.ts, 13, 5))
+>id1 : Symbol(id1, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 0))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 13, 26))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 13, 26))
+
+const f22 = id2(function (foo = 42) { return foo });
+>f22 : Symbol(f22, Decl(contextuallyTypedParametersWithInitializers.ts, 14, 5))
+>id2 : Symbol(id2, Decl(contextuallyTypedParametersWithInitializers.ts, 0, 37))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 14, 26))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 14, 26))
+
+const f25 = id5(function (foo = 42) { return foo });
+>f25 : Symbol(f25, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 5))
+>id5 : Symbol(id5, Decl(contextuallyTypedParametersWithInitializers.ts, 3, 74))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 26))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 26))
+
+// Repro from #28816
+
+function id(input: T): T { return input }
+>id : Symbol(id, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 52))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 12))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 15))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 12))
+>T : Symbol(T, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 12))
+>input : Symbol(input, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 15))
+
+function getFoo ({ foo = 42 }) {
+>getFoo : Symbol(getFoo, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 44))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 21, 18))
+
+ return foo;
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 21, 18))
+}
+
+const newGetFoo = id(getFoo);
+>newGetFoo : Symbol(newGetFoo, Decl(contextuallyTypedParametersWithInitializers.ts, 25, 5))
+>id : Symbol(id, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 52))
+>getFoo : Symbol(getFoo, Decl(contextuallyTypedParametersWithInitializers.ts, 19, 44))
+
+const newGetFoo2 = id(function getFoo ({ foo = 42 }) {
+>newGetFoo2 : Symbol(newGetFoo2, Decl(contextuallyTypedParametersWithInitializers.ts, 26, 5))
+>id : Symbol(id, Decl(contextuallyTypedParametersWithInitializers.ts, 15, 52))
+>getFoo : Symbol(getFoo, Decl(contextuallyTypedParametersWithInitializers.ts, 26, 22))
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 26, 40))
+
+ return foo;
+>foo : Symbol(foo, Decl(contextuallyTypedParametersWithInitializers.ts, 26, 40))
+
+});
+
diff --git a/tests/baselines/reference/contextuallyTypedParametersWithInitializers.types b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.types
new file mode 100644
index 00000000000..3824b16ae62
--- /dev/null
+++ b/tests/baselines/reference/contextuallyTypedParametersWithInitializers.types
@@ -0,0 +1,140 @@
+=== tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts ===
+declare function id1(input: T): T;
+>id1 : (input: T) => T
+>input : T
+
+declare function id2 any>(input: T): T;
+>id2 : any>(input: T) => T
+>x : any
+>input : T
+
+declare function id3 any>(input: T): T;
+>id3 : any>(input: T) => T
+>x : { foo: any; }
+>foo : any
+>input : T
+
+declare function id4 any>(input: T): T;
+>id4 : any>(input: T) => T
+>x : { foo?: number | undefined; }
+>foo : number | undefined
+>input : T
+
+declare function id5 any>(input: T): T;
+>id5 : any>(input: T) => T
+>x : number | undefined
+>input : T
+
+const f10 = function ({ foo = 42 }) { return foo };
+>f10 : ({ foo }: { foo?: number | undefined; }) => number
+>function ({ foo = 42 }) { return foo } : ({ foo }: { foo?: number | undefined; }) => number
+>foo : number
+>42 : 42
+>foo : number
+
+const f11 = id1(function ({ foo = 42 }) { return foo }); // Implicit any error
+>f11 : ({ foo }: any) => any
+>id1(function ({ foo = 42 }) { return foo }) : ({ foo }: any) => any
+>id1 : (input: T) => T
+>function ({ foo = 42 }) { return foo } : ({ foo }: any) => any
+>foo : any
+>42 : 42
+>foo : any
+
+const f12 = id2(function ({ foo = 42 }) { return foo });
+>f12 : ({ foo }: any) => any
+>id2(function ({ foo = 42 }) { return foo }) : ({ foo }: any) => any
+>id2 : any>(input: T) => T
+>function ({ foo = 42 }) { return foo } : ({ foo }: any) => any
+>foo : any
+>42 : 42
+>foo : any
+
+const f13 = id3(function ({ foo = 42 }) { return foo });
+>f13 : ({ foo }: { foo: any; }) => any
+>id3(function ({ foo = 42 }) { return foo }) : ({ foo }: { foo: any; }) => any
+>id3 : any>(input: T) => T
+>function ({ foo = 42 }) { return foo } : ({ foo }: { foo: any; }) => any
+>foo : any
+>42 : 42
+>foo : any
+
+const f14 = id4(function ({ foo = 42 }) { return foo });
+>f14 : ({ foo }: { foo?: number | undefined; }) => number
+>id4(function ({ foo = 42 }) { return foo }) : ({ foo }: { foo?: number | undefined; }) => number
+>id4 : any>(input: T) => T
+>function ({ foo = 42 }) { return foo } : ({ foo }: { foo?: number | undefined; }) => number
+>foo : number
+>42 : 42
+>foo : number
+
+const f20 = function (foo = 42) { return foo };
+>f20 : (foo?: number) => number
+>function (foo = 42) { return foo } : (foo?: number) => number
+>foo : number
+>42 : 42
+>foo : number
+
+const f21 = id1(function (foo = 42) { return foo }); // Implicit any error
+>f21 : (foo?: any) => any
+>id1(function (foo = 42) { return foo }) : (foo?: any) => any
+>id1 : (input: T) => T
+>function (foo = 42) { return foo } : (foo?: any) => any
+>foo : any
+>42 : 42
+>foo : any
+
+const f22 = id2(function (foo = 42) { return foo });
+>f22 : (foo?: any) => any
+>id2(function (foo = 42) { return foo }) : (foo?: any) => any
+>id2 : any>(input: T) => T
+>function (foo = 42) { return foo } : (foo?: any) => any
+>foo : any
+>42 : 42
+>foo : any
+
+const f25 = id5(function (foo = 42) { return foo });
+>f25 : (foo?: number | undefined) => number
+>id5(function (foo = 42) { return foo }) : (foo?: number | undefined) => number
+>id5 : any>(input: T) => T
+>function (foo = 42) { return foo } : (foo?: number | undefined) => number
+>foo : number | undefined
+>42 : 42
+>foo : number
+
+// Repro from #28816
+
+function id(input: T): T { return input }
+>id : (input: T) => T
+>input : T
+>input : T
+
+function getFoo ({ foo = 42 }) {
+>getFoo : ({ foo }: { foo?: number | undefined; }) => number
+>foo : number
+>42 : 42
+
+ return foo;
+>foo : number
+}
+
+const newGetFoo = id(getFoo);
+>newGetFoo : ({ foo }: { foo?: number | undefined; }) => number
+>id(getFoo) : ({ foo }: { foo?: number | undefined; }) => number
+>id : (input: T) => T
+>getFoo : ({ foo }: { foo?: number | undefined; }) => number
+
+const newGetFoo2 = id(function getFoo ({ foo = 42 }) {
+>newGetFoo2 : ({ foo }: any) => any
+>id(function getFoo ({ foo = 42 }) { return foo;}) : ({ foo }: any) => any
+>id : (input: T) => T
+>function getFoo ({ foo = 42 }) { return foo;} : ({ foo }: any) => any
+>getFoo : ({ foo }: any) => any
+>foo : any
+>42 : 42
+
+ return foo;
+>foo : any
+
+});
+
diff --git a/tests/baselines/reference/didYouMeanSuggestionErrors.errors.txt b/tests/baselines/reference/didYouMeanSuggestionErrors.errors.txt
index 9bf043562d9..a41b19ecd9d 100644
--- a/tests/baselines/reference/didYouMeanSuggestionErrors.errors.txt
+++ b/tests/baselines/reference/didYouMeanSuggestionErrors.errors.txt
@@ -1,14 +1,14 @@
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(1,1): error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(2,5): error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(3,19): error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(7,1): error TS2582: Cannot find name 'suite'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(8,5): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(1,1): error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(2,5): error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(3,19): error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(7,1): error TS2582: Cannot find name 'suite'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(8,5): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/didYouMeanSuggestionErrors.ts(9,9): error TS2584: Cannot find name 'console'. Do you need to change your target library? Try changing the `lib` compiler option to include 'dom'.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(9,21): error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(9,21): error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/didYouMeanSuggestionErrors.ts(10,9): error TS2584: Cannot find name 'document'. Do you need to change your target library? Try changing the `lib` compiler option to include 'dom'.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(12,19): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(13,19): error TS2580: Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/compiler/didYouMeanSuggestionErrors.ts(14,19): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(12,19): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(13,19): error TS2580: Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/compiler/didYouMeanSuggestionErrors.ts(14,19): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/didYouMeanSuggestionErrors.ts(16,23): error TS2583: Cannot find name 'Map'. Do you need to change your target library? Try changing the `lib` compiler option to es2015 or later.
tests/cases/compiler/didYouMeanSuggestionErrors.ts(17,23): error TS2583: Cannot find name 'Set'. Do you need to change your target library? Try changing the `lib` compiler option to es2015 or later.
tests/cases/compiler/didYouMeanSuggestionErrors.ts(18,23): error TS2583: Cannot find name 'WeakMap'. Do you need to change your target library? Try changing the `lib` compiler option to es2015 or later.
@@ -22,40 +22,40 @@ tests/cases/compiler/didYouMeanSuggestionErrors.ts(24,18): error TS2583: Cannot
==== tests/cases/compiler/didYouMeanSuggestionErrors.ts (19 errors) ====
describe("my test suite", () => {
~~~~~~~~
-!!! error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
it("should run", () => {
~~
-!!! error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
const a = $(".thing");
~
-!!! error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.
+!!! error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.
});
});
suite("another suite", () => {
~~~~~
-!!! error TS2582: Cannot find name 'suite'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'suite'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test("everything else", () => {
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
console.log(process.env);
~~~~~~~
!!! error TS2584: Cannot find name 'console'. Do you need to change your target library? Try changing the `lib` compiler option to include 'dom'.
~~~~~~~
-!!! error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i @types/node`.
document.createElement("div");
~~~~~~~~
!!! error TS2584: Cannot find name 'document'. Do you need to change your target library? Try changing the `lib` compiler option to include 'dom'.
const x = require("fs");
~~~~~~~
-!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
const y = Buffer.from([]);
~~~~~~
-!!! error TS2580: Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i @types/node`.
const z = module.exports;
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
const a = new Map();
~~~
diff --git a/tests/baselines/reference/externModule.errors.txt b/tests/baselines/reference/externModule.errors.txt
index 8e95e2c8101..d30cd737ab1 100644
--- a/tests/baselines/reference/externModule.errors.txt
+++ b/tests/baselines/reference/externModule.errors.txt
@@ -1,6 +1,6 @@
tests/cases/compiler/externModule.ts(1,1): error TS2304: Cannot find name 'declare'.
tests/cases/compiler/externModule.ts(1,9): error TS1005: ';' expected.
-tests/cases/compiler/externModule.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/externModule.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/externModule.ts(1,16): error TS1005: ';' expected.
tests/cases/compiler/externModule.ts(3,10): error TS2391: Function implementation is missing or not immediately following the declaration.
tests/cases/compiler/externModule.ts(4,10): error TS2391: Function implementation is missing or not immediately following the declaration.
@@ -21,7 +21,7 @@ tests/cases/compiler/externModule.ts(37,3): error TS2552: Cannot find name 'XDat
~~~~~~
!!! error TS1005: ';' expected.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
export class XDate {
diff --git a/tests/baselines/reference/fatarrowfunctionsErrors.types b/tests/baselines/reference/fatarrowfunctionsErrors.types
index 4a493734e09..36b123e338a 100644
--- a/tests/baselines/reference/fatarrowfunctionsErrors.types
+++ b/tests/baselines/reference/fatarrowfunctionsErrors.types
@@ -25,10 +25,10 @@ foo((x?)=>{return x;})
foo((x=0)=>{return x;})
>foo((x=0)=>{return x;}) : any
>foo : any
->(x=0)=>{return x;} : (x?: number) => number
->x : number
+>(x=0)=>{return x;} : (x?: any) => any
+>x : any
>0 : 0
->x : number
+>x : any
var y = x:number => x*x;
>y : any
diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgs.types b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.types
index e9ae9488b91..ed7438dd6a0 100644
--- a/tests/baselines/reference/fatarrowfunctionsOptionalArgs.types
+++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.types
@@ -653,8 +653,8 @@ foo(
>116 : 116
(a = 0) => 117,
->(a = 0) => 117 : (a?: number) => number
->a : number
+>(a = 0) => 117 : (a?: any) => number
+>a : any
>0 : 0
>117 : 117
@@ -670,9 +670,9 @@ foo(
>119 : 119
(a, b? = 0, ...c: number[]) => 120,
->(a, b? = 0, ...c: number[]) => 120 : (a: any, b?: number, ...c: number[]) => number
+>(a, b? = 0, ...c: number[]) => 120 : (a: any, b?: any, ...c: number[]) => number
>a : any
->b : number
+>b : any
>0 : 0
>c : number[]
>120 : 120
diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.types b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.types
index 18860e274ca..7496677a194 100644
--- a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.types
+++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.types
@@ -88,8 +88,8 @@
>116 : 116
(a = 0) => 117,
->(a = 0) => 117 : (a?: number) => number
->a : number
+>(a = 0) => 117 : (a?: any) => number
+>a : any
>0 : 0
>117 : 117
@@ -105,9 +105,9 @@
>119 : 119
(a, b? = 0, ...c: number[]) => 120,
->(a, b? = 0, ...c: number[]) => 120 : (a: any, b?: number, ...c: number[]) => number
+>(a, b? = 0, ...c: number[]) => 120 : (a: any, b?: any, ...c: number[]) => number
>a : any
->b : number
+>b : any
>0 : 0
>c : number[]
>120 : 120
diff --git a/tests/baselines/reference/fixSignatureCaching.errors.txt b/tests/baselines/reference/fixSignatureCaching.errors.txt
index ad992cae7db..bf4400313b2 100644
--- a/tests/baselines/reference/fixSignatureCaching.errors.txt
+++ b/tests/baselines/reference/fixSignatureCaching.errors.txt
@@ -50,9 +50,9 @@ tests/cases/conformance/fixSignatureCaching.ts(915,36): error TS2339: Property '
tests/cases/conformance/fixSignatureCaching.ts(915,53): error TS2339: Property 'mobileDetectRules' does not exist on type '{}'.
tests/cases/conformance/fixSignatureCaching.ts(955,42): error TS2339: Property 'mobileGrade' does not exist on type '{}'.
tests/cases/conformance/fixSignatureCaching.ts(964,57): error TS2339: Property 'getDeviceSmallerSide' does not exist on type '{}'.
-tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/conformance/fixSignatureCaching.ts(978,42): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/conformance/fixSignatureCaching.ts(979,37): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/conformance/fixSignatureCaching.ts(978,42): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/conformance/fixSignatureCaching.ts(979,37): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/fixSignatureCaching.ts(980,23): error TS2304: Cannot find name 'define'.
tests/cases/conformance/fixSignatureCaching.ts(980,48): error TS2304: Cannot find name 'define'.
tests/cases/conformance/fixSignatureCaching.ts(981,16): error TS2304: Cannot find name 'define'.
@@ -1143,12 +1143,12 @@ tests/cases/conformance/fixSignatureCaching.ts(983,44): error TS2339: Property '
})((function (undefined) {
if (typeof module !== 'undefined' && module.exports) {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
return function (factory) { module.exports = factory(); };
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
} else if (typeof define === 'function' && define.amd) {
~~~~~~
!!! error TS2304: Cannot find name 'define'.
diff --git a/tests/baselines/reference/innerModExport1.errors.txt b/tests/baselines/reference/innerModExport1.errors.txt
index 1278afcb4d3..29ce225dfa2 100644
--- a/tests/baselines/reference/innerModExport1.errors.txt
+++ b/tests/baselines/reference/innerModExport1.errors.txt
@@ -1,4 +1,4 @@
-tests/cases/compiler/innerModExport1.ts(5,5): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/innerModExport1.ts(5,5): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/innerModExport1.ts(5,12): error TS1005: ';' expected.
@@ -9,7 +9,7 @@ tests/cases/compiler/innerModExport1.ts(5,12): error TS1005: ';' expected.
var non_export_var: number;
module {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
var non_export_var = 0;
diff --git a/tests/baselines/reference/innerModExport2.errors.txt b/tests/baselines/reference/innerModExport2.errors.txt
index ffd136f1a65..21cc583c5d3 100644
--- a/tests/baselines/reference/innerModExport2.errors.txt
+++ b/tests/baselines/reference/innerModExport2.errors.txt
@@ -1,4 +1,4 @@
-tests/cases/compiler/innerModExport2.ts(5,5): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/innerModExport2.ts(5,5): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/innerModExport2.ts(5,12): error TS1005: ';' expected.
tests/cases/compiler/innerModExport2.ts(7,20): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local.
tests/cases/compiler/innerModExport2.ts(13,9): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local.
@@ -12,7 +12,7 @@ tests/cases/compiler/innerModExport2.ts(20,7): error TS2339: Property 'NonExport
var non_export_var: number;
module {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
var non_export_var = 0;
diff --git a/tests/baselines/reference/jsxAndTypeAssertion.errors.txt b/tests/baselines/reference/jsxAndTypeAssertion.errors.txt
index c67e9c70dfd..6d3f6874a88 100644
--- a/tests/baselines/reference/jsxAndTypeAssertion.errors.txt
+++ b/tests/baselines/reference/jsxAndTypeAssertion.errors.txt
@@ -1,5 +1,5 @@
tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(6,6): error TS17008: JSX element 'any' has no corresponding closing tag.
-tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(6,13): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(6,13): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(6,17): error TS1005: '}' expected.
tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(8,6): error TS17008: JSX element 'any' has no corresponding closing tag.
tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(10,6): error TS17008: JSX element 'foo' has no corresponding closing tag.
@@ -24,7 +24,7 @@ tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: '' ex
~~~
!!! error TS17008: JSX element 'any' has no corresponding closing tag.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
~
!!! error TS1005: '}' expected.
diff --git a/tests/baselines/reference/metadataImportType.errors.txt b/tests/baselines/reference/metadataImportType.errors.txt
index b7e46cc41d4..2b0f709736d 100644
--- a/tests/baselines/reference/metadataImportType.errors.txt
+++ b/tests/baselines/reference/metadataImportType.errors.txt
@@ -1,4 +1,4 @@
-tests/cases/compiler/metadataImportType.ts(2,6): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/metadataImportType.ts(2,6): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/metadataImportType.ts(3,15): error TS2307: Cannot find module './b'.
@@ -6,7 +6,7 @@ tests/cases/compiler/metadataImportType.ts(3,15): error TS2307: Cannot find modu
export class A {
@test
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
b: import('./b').B
~~~~~
!!! error TS2307: Cannot find module './b'.
diff --git a/tests/baselines/reference/moduleExports1.errors.txt b/tests/baselines/reference/moduleExports1.errors.txt
index 6beca6f2051..03d21d86b8a 100644
--- a/tests/baselines/reference/moduleExports1.errors.txt
+++ b/tests/baselines/reference/moduleExports1.errors.txt
@@ -1,5 +1,5 @@
-tests/cases/compiler/moduleExports1.ts(13,6): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/compiler/moduleExports1.ts(13,22): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/moduleExports1.ts(13,6): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/compiler/moduleExports1.ts(13,22): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/compiler/moduleExports1.ts (2 errors) ====
@@ -17,6 +17,6 @@ tests/cases/compiler/moduleExports1.ts(13,22): error TS2580: Cannot find name 'm
if (!module.exports) module.exports = "";
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
\ No newline at end of file
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
\ No newline at end of file
diff --git a/tests/baselines/reference/moduleKeywordRepeatError.errors.txt b/tests/baselines/reference/moduleKeywordRepeatError.errors.txt
index a790c974fb9..65a81c19213 100644
--- a/tests/baselines/reference/moduleKeywordRepeatError.errors.txt
+++ b/tests/baselines/reference/moduleKeywordRepeatError.errors.txt
@@ -1,4 +1,4 @@
-tests/cases/compiler/moduleKeywordRepeatError.ts(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/moduleKeywordRepeatError.ts(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/moduleKeywordRepeatError.ts(3,15): error TS1005: ';' expected.
@@ -7,6 +7,6 @@ tests/cases/compiler/moduleKeywordRepeatError.ts(3,15): error TS1005: ';' expect
module.module { }
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
\ No newline at end of file
diff --git a/tests/baselines/reference/noAssertForUnparseableTypedefs.errors.txt b/tests/baselines/reference/noAssertForUnparseableTypedefs.errors.txt
index dde502427dd..b131c8adac0 100644
--- a/tests/baselines/reference/noAssertForUnparseableTypedefs.errors.txt
+++ b/tests/baselines/reference/noAssertForUnparseableTypedefs.errors.txt
@@ -1,4 +1,4 @@
-tests/cases/conformance/jsdoc/bug26693.js(1,15): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/jsdoc/bug26693.js(1,15): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/jsdoc/bug26693.js(1,21): error TS1005: '}' expected.
tests/cases/conformance/jsdoc/bug26693.js(2,22): error TS2307: Cannot find module 'nope'.
@@ -6,7 +6,7 @@ tests/cases/conformance/jsdoc/bug26693.js(2,22): error TS2307: Cannot find modul
==== tests/cases/conformance/jsdoc/bug26693.js (3 errors) ====
/** @typedef {module:locale} hi */
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: '}' expected.
import { nope } from 'nope';
diff --git a/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt
index 57af2cbcd2c..56adb4706f1 100644
--- a/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt
+++ b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt
@@ -1,13 +1,13 @@
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(1,14): error TS1005: '(' expected.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(2,3): error TS1128: Declaration or statement expected.
-tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(2,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(2,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,3): error TS1128: Declaration or statement expected.
-tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,15): error TS2304: Cannot find name 'name'.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,19): error TS1005: ',' expected.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,20): error TS2693: 'string' only refers to a type, but is being used as a value here.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,3): error TS1128: Declaration or statement expected.
-tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,10): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,15): error TS2304: Cannot find name 'name'.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,20): error TS1109: Expression expected.
tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,21): error TS2693: 'any' only refers to a type, but is being used as a value here.
@@ -22,12 +22,12 @@ tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,25): error TS100
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
static test(name:string)
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
~~~~
!!! error TS2304: Cannot find name 'name'.
~
@@ -38,7 +38,7 @@ tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,25): error TS100
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
~~~~
!!! error TS2304: Cannot find name 'name'.
~
diff --git a/tests/baselines/reference/parser509534.errors.txt b/tests/baselines/reference/parser509534.errors.txt
index 29284f19f6e..ff5eb131b5c 100644
--- a/tests/baselines/reference/parser509534.errors.txt
+++ b/tests/baselines/reference/parser509534.errors.txt
@@ -1,15 +1,15 @@
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509534.ts(2,14): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509534.ts(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509534.ts(2,14): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509534.ts(3,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509534.ts (2 errors) ====
"use strict";
var config = require("../config");
~~~~~~~
-!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
module.exports.route = function (server) {
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
// General Login Page
server.get(config.env.siteRoot + "/auth/login", function (req, res, next) {
diff --git a/tests/baselines/reference/parser509693.errors.txt b/tests/baselines/reference/parser509693.errors.txt
index ed7bc8f2be6..b6fbff74f33 100644
--- a/tests/baselines/reference/parser509693.errors.txt
+++ b/tests/baselines/reference/parser509693.errors.txt
@@ -1,10 +1,10 @@
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509693.ts(1,6): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509693.ts(1,22): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509693.ts(1,6): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509693.ts(1,22): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509693.ts (2 errors) ====
if (!module.exports) module.exports = "";
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
\ No newline at end of file
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
\ No newline at end of file
diff --git a/tests/baselines/reference/parser519458.errors.txt b/tests/baselines/reference/parser519458.errors.txt
index bf655b5b957..ee13350fcbb 100644
--- a/tests/baselines/reference/parser519458.errors.txt
+++ b/tests/baselines/reference/parser519458.errors.txt
@@ -1,5 +1,5 @@
tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts(1,15): error TS2503: Cannot find namespace 'module'.
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts(1,15): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts(1,15): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts(1,21): error TS1005: ';' expected.
@@ -8,7 +8,7 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts(1,21)
~~~~~~
!!! error TS2503: Cannot find namespace 'module'.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
\ No newline at end of file
diff --git a/tests/baselines/reference/parser521128.errors.txt b/tests/baselines/reference/parser521128.errors.txt
index e74ac9a2f05..910c4217b4f 100644
--- a/tests/baselines/reference/parser521128.errors.txt
+++ b/tests/baselines/reference/parser521128.errors.txt
@@ -1,10 +1,10 @@
-tests/cases/conformance/parser/ecmascript5/RegressionTests/parser521128.ts(1,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/RegressionTests/parser521128.ts(1,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/parser/ecmascript5/RegressionTests/parser521128.ts(1,15): error TS1005: ';' expected.
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser521128.ts (2 errors) ====
module.module { }
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
\ No newline at end of file
diff --git a/tests/baselines/reference/parserCommaInTypeMemberList2.errors.txt b/tests/baselines/reference/parserCommaInTypeMemberList2.errors.txt
index be99794b1d9..f2f695e0120 100644
--- a/tests/baselines/reference/parserCommaInTypeMemberList2.errors.txt
+++ b/tests/baselines/reference/parserCommaInTypeMemberList2.errors.txt
@@ -1,8 +1,8 @@
-tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserCommaInTypeMemberList2.ts(1,9): error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserCommaInTypeMemberList2.ts(1,9): error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.
==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserCommaInTypeMemberList2.ts (1 errors) ====
var s = $.extend< { workItem: any }, { workItem: any, width: string }>({ workItem: this._workItem }, {});
~
-!!! error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery` and then add `jquery` to the types field in your tsconfig.
+!!! error TS2581: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`.
\ No newline at end of file
diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt
index 568eb370e0d..990fa5816c7 100644
--- a/tests/baselines/reference/parserharness.errors.txt
+++ b/tests/baselines/reference/parserharness.errors.txt
@@ -5,8 +5,8 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(19,21): er
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(21,29): error TS2694: Namespace 'Harness' has no exported member 'Assert'.
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(25,17): error TS2304: Cannot find name 'IIO'.
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(41,12): error TS2304: Cannot find name 'ActiveXObject'.
-tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(43,19): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(44,14): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(43,19): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(44,14): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(341,13): error TS2662: Cannot find name 'errorHandlerStack'. Did you mean the static member 'Runnable.errorHandlerStack'?
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(347,13): error TS2662: Cannot find name 'errorHandlerStack'. Did you mean the static member 'Runnable.errorHandlerStack'?
tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(351,17): error TS2662: Cannot find name 'errorHandlerStack'. Did you mean the static member 'Runnable.errorHandlerStack'?
@@ -169,10 +169,10 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32):
eval(typescriptServiceFile);
} else if (typeof require === "function") {
~~~~~~~
-!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
var vm = require('vm');
~~~~~~~
-!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
vm.runInThisContext(typescriptServiceFile, 'typescriptServices.js');
} else {
throw new Error('Unknown context');
diff --git a/tests/baselines/reference/reservedWords2.errors.txt b/tests/baselines/reference/reservedWords2.errors.txt
index b4af3c52916..437b414a69d 100644
--- a/tests/baselines/reference/reservedWords2.errors.txt
+++ b/tests/baselines/reference/reservedWords2.errors.txt
@@ -1,6 +1,6 @@
tests/cases/compiler/reservedWords2.ts(1,8): error TS1109: Expression expected.
tests/cases/compiler/reservedWords2.ts(1,14): error TS1005: '(' expected.
-tests/cases/compiler/reservedWords2.ts(1,16): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/reservedWords2.ts(1,16): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/reservedWords2.ts(1,31): error TS1005: ')' expected.
tests/cases/compiler/reservedWords2.ts(2,12): error TS2300: Duplicate identifier '(Missing)'.
tests/cases/compiler/reservedWords2.ts(2,12): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
@@ -14,7 +14,7 @@ tests/cases/compiler/reservedWords2.ts(5,9): error TS2300: Duplicate identifier
tests/cases/compiler/reservedWords2.ts(5,9): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
tests/cases/compiler/reservedWords2.ts(5,10): error TS1003: Identifier expected.
tests/cases/compiler/reservedWords2.ts(5,18): error TS1005: '=>' expected.
-tests/cases/compiler/reservedWords2.ts(6,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/reservedWords2.ts(6,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/compiler/reservedWords2.ts(6,8): error TS1005: ';' expected.
tests/cases/compiler/reservedWords2.ts(7,11): error TS2300: Duplicate identifier '(Missing)'.
tests/cases/compiler/reservedWords2.ts(7,11): error TS1005: ':' expected.
@@ -39,7 +39,7 @@ tests/cases/compiler/reservedWords2.ts(10,6): error TS1003: Identifier expected.
~
!!! error TS1005: '(' expected.
~~~~~~~
-!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ')' expected.
import * as while from "foo"
@@ -72,7 +72,7 @@ tests/cases/compiler/reservedWords2.ts(10,6): error TS1003: Identifier expected.
!!! error TS1005: '=>' expected.
module void {}
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~~~~
!!! error TS1005: ';' expected.
var {while, return} = { while: 1, return: 2 };
diff --git a/tests/baselines/reference/staticsInAFunction.errors.txt b/tests/baselines/reference/staticsInAFunction.errors.txt
index 33ca824de99..499ab91e93f 100644
--- a/tests/baselines/reference/staticsInAFunction.errors.txt
+++ b/tests/baselines/reference/staticsInAFunction.errors.txt
@@ -1,13 +1,13 @@
tests/cases/compiler/staticsInAFunction.ts(1,13): error TS1005: '(' expected.
tests/cases/compiler/staticsInAFunction.ts(2,4): error TS1128: Declaration or statement expected.
-tests/cases/compiler/staticsInAFunction.ts(2,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/staticsInAFunction.ts(2,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/staticsInAFunction.ts(3,4): error TS1128: Declaration or statement expected.
-tests/cases/compiler/staticsInAFunction.ts(3,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/staticsInAFunction.ts(3,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/staticsInAFunction.ts(3,16): error TS2304: Cannot find name 'name'.
tests/cases/compiler/staticsInAFunction.ts(3,20): error TS1005: ',' expected.
tests/cases/compiler/staticsInAFunction.ts(3,21): error TS2693: 'string' only refers to a type, but is being used as a value here.
tests/cases/compiler/staticsInAFunction.ts(4,4): error TS1128: Declaration or statement expected.
-tests/cases/compiler/staticsInAFunction.ts(4,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+tests/cases/compiler/staticsInAFunction.ts(4,11): error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
tests/cases/compiler/staticsInAFunction.ts(4,16): error TS2304: Cannot find name 'name'.
tests/cases/compiler/staticsInAFunction.ts(4,21): error TS1109: Expression expected.
tests/cases/compiler/staticsInAFunction.ts(4,22): error TS2693: 'any' only refers to a type, but is being used as a value here.
@@ -22,12 +22,12 @@ tests/cases/compiler/staticsInAFunction.ts(4,26): error TS1005: ';' expected.
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
static test(name:string)
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
~~~~
!!! error TS2304: Cannot find name 'name'.
~
@@ -38,7 +38,7 @@ tests/cases/compiler/staticsInAFunction.ts(4,26): error TS1005: ';' expected.
~~~~~~
!!! error TS1128: Declaration or statement expected.
~~~~
-!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig.
+!!! error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
~~~~
!!! error TS2304: Cannot find name 'name'.
~
diff --git a/tests/baselines/reference/superAccess2.errors.txt b/tests/baselines/reference/superAccess2.errors.txt
index 3ba682b3145..65d4c10794d 100644
--- a/tests/baselines/reference/superAccess2.errors.txt
+++ b/tests/baselines/reference/superAccess2.errors.txt
@@ -7,7 +7,6 @@ tests/cases/compiler/superAccess2.ts(11,33): error TS1034: 'super' must be follo
tests/cases/compiler/superAccess2.ts(11,40): error TS2336: 'super' cannot be referenced in constructor arguments.
tests/cases/compiler/superAccess2.ts(11,40): error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
tests/cases/compiler/superAccess2.ts(11,45): error TS1034: 'super' must be followed by an argument list or member access.
-tests/cases/compiler/superAccess2.ts(11,59): error TS2336: 'super' cannot be referenced in constructor arguments.
tests/cases/compiler/superAccess2.ts(11,59): error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
tests/cases/compiler/superAccess2.ts(11,64): error TS1034: 'super' must be followed by an argument list or member access.
tests/cases/compiler/superAccess2.ts(15,19): error TS1034: 'super' must be followed by an argument list or member access.
@@ -16,7 +15,7 @@ tests/cases/compiler/superAccess2.ts(20,26): error TS1034: 'super' must be follo
tests/cases/compiler/superAccess2.ts(21,15): error TS2339: Property 'x' does not exist on type 'typeof P'.
-==== tests/cases/compiler/superAccess2.ts (16 errors) ====
+==== tests/cases/compiler/superAccess2.ts (15 errors) ====
class P {
x() { }
static y() { }
@@ -47,8 +46,6 @@ tests/cases/compiler/superAccess2.ts(21,15): error TS2339: Property 'x' does not
~
!!! error TS1034: 'super' must be followed by an argument list or member access.
~~~~~
-!!! error TS2336: 'super' cannot be referenced in constructor arguments.
- ~~~~~
!!! error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class.
~
!!! error TS1034: 'super' must be followed by an argument list or member access.
diff --git a/tests/baselines/reference/superAccess2.symbols b/tests/baselines/reference/superAccess2.symbols
index 7a9fcb236d6..abb3385b970 100644
--- a/tests/baselines/reference/superAccess2.symbols
+++ b/tests/baselines/reference/superAccess2.symbols
@@ -25,6 +25,7 @@ class Q extends P {
>z : Symbol(Q.z, Decl(superAccess2.ts, 10, 16))
>zz : Symbol(zz, Decl(superAccess2.ts, 10, 33))
>zzz : Symbol(zzz, Decl(superAccess2.ts, 10, 45))
+>super : Symbol(P, Decl(superAccess2.ts, 0, 0))
super();
>super : Symbol(P, Decl(superAccess2.ts, 0, 0))
diff --git a/tests/baselines/reference/superAccess2.types b/tests/baselines/reference/superAccess2.types
index 06fcd380480..00ae91bf4c3 100644
--- a/tests/baselines/reference/superAccess2.types
+++ b/tests/baselines/reference/superAccess2.types
@@ -38,7 +38,7 @@ class Q extends P {
>zzz : () => any
>() => super : () => any
>super : any
->super : any
+>super : P
> : any
super();
diff --git a/tests/baselines/reference/templateStringInModuleName.errors.txt b/tests/baselines/reference/templateStringInModuleName.errors.txt
index 3236b6da81c..f684b305c52 100644
--- a/tests/baselines/reference/templateStringInModuleName.errors.txt
+++ b/tests/baselines/reference/templateStringInModuleName.errors.txt
@@ -1,10 +1,10 @@
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,1): error TS2304: Cannot find name 'declare'.
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS1005: ';' expected.
-tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,21): error TS1005: ';' expected.
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,1): error TS2304: Cannot find name 'declare'.
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS1005: ';' expected.
-tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,24): error TS1005: ';' expected.
@@ -15,7 +15,7 @@ tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,24): error
~~~~~~
!!! error TS1005: ';' expected.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
}
@@ -26,7 +26,7 @@ tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,24): error
~~~~~~
!!! error TS1005: ';' expected.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
}
\ No newline at end of file
diff --git a/tests/baselines/reference/templateStringInModuleNameES6.errors.txt b/tests/baselines/reference/templateStringInModuleNameES6.errors.txt
index 4526bb0d792..ecd072a7579 100644
--- a/tests/baselines/reference/templateStringInModuleNameES6.errors.txt
+++ b/tests/baselines/reference/templateStringInModuleNameES6.errors.txt
@@ -1,10 +1,10 @@
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(1,1): error TS2304: Cannot find name 'declare'.
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(1,9): error TS1005: ';' expected.
-tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(1,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(1,21): error TS1005: ';' expected.
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,1): error TS2304: Cannot find name 'declare'.
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,9): error TS1005: ';' expected.
-tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,9): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,24): error TS1005: ';' expected.
@@ -15,7 +15,7 @@ tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,24): er
~~~~~~
!!! error TS1005: ';' expected.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
}
@@ -26,7 +26,7 @@ tests/cases/conformance/es6/templates/templateStringInModuleNameES6.ts(4,24): er
~~~~~~
!!! error TS1005: ';' expected.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~
!!! error TS1005: ';' expected.
}
\ No newline at end of file
diff --git a/tests/baselines/reference/thisInConstructorParameter2.errors.txt b/tests/baselines/reference/thisInConstructorParameter2.errors.txt
index 35818b8f379..2b6ed8017c2 100644
--- a/tests/baselines/reference/thisInConstructorParameter2.errors.txt
+++ b/tests/baselines/reference/thisInConstructorParameter2.errors.txt
@@ -10,11 +10,13 @@ tests/cases/compiler/thisInConstructorParameter2.ts(5,39): error TS2333: 'this'
~~~~
!!! error TS2334: 'this' cannot be referenced in a static property initializer.
- constructor(public z = this, zz = this) { }
+ constructor(public z = this, zz = this, zzz = (p = this) => this) {
~~~~
!!! error TS2333: 'this' cannot be referenced in constructor arguments.
~~~~
!!! error TS2333: 'this' cannot be referenced in constructor arguments.
+ zzz = (p = this) => this;
+ }
foo(zz = this) { zz.x; }
static bar(zz = this) { zz.y; }
diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js
index a5e4f4d8b57..fc1525f03cf 100644
--- a/tests/baselines/reference/thisInConstructorParameter2.js
+++ b/tests/baselines/reference/thisInConstructorParameter2.js
@@ -3,7 +3,9 @@ class P {
x = this;
static y = this;
- constructor(public z = this, zz = this) { }
+ constructor(public z = this, zz = this, zzz = (p = this) => this) {
+ zzz = (p = this) => this;
+ }
foo(zz = this) { zz.x; }
static bar(zz = this) { zz.y; }
@@ -12,11 +14,20 @@ class P {
//// [thisInConstructorParameter2.js]
var _this = this;
var P = /** @class */ (function () {
- function P(z, zz) {
+ function P(z, zz, zzz) {
if (z === void 0) { z = this; }
if (zz === void 0) { zz = this; }
+ if (zzz === void 0) { zzz = function (p) {
+ if (p === void 0) { p = _this; }
+ return _this;
+ }; }
+ var _this = this;
this.z = z;
this.x = this;
+ zzz = function (p) {
+ if (p === void 0) { p = _this; }
+ return _this;
+ };
}
P.prototype.foo = function (zz) {
if (zz === void 0) { zz = this; }
diff --git a/tests/baselines/reference/thisInConstructorParameter2.symbols b/tests/baselines/reference/thisInConstructorParameter2.symbols
index 8991e64f66a..96bdfb159be 100644
--- a/tests/baselines/reference/thisInConstructorParameter2.symbols
+++ b/tests/baselines/reference/thisInConstructorParameter2.symbols
@@ -10,25 +10,36 @@ class P {
>y : Symbol(P.y, Decl(thisInConstructorParameter2.ts, 1, 13))
>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
- constructor(public z = this, zz = this) { }
+ constructor(public z = this, zz = this, zzz = (p = this) => this) {
>z : Symbol(P.z, Decl(thisInConstructorParameter2.ts, 4, 16))
>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
>zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 4, 32))
>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
+>zzz : Symbol(zzz, Decl(thisInConstructorParameter2.ts, 4, 43))
+>p : Symbol(p, Decl(thisInConstructorParameter2.ts, 4, 51))
+>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
+>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
+
+ zzz = (p = this) => this;
+>zzz : Symbol(zzz, Decl(thisInConstructorParameter2.ts, 4, 43))
+>p : Symbol(p, Decl(thisInConstructorParameter2.ts, 5, 15))
+>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
+>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
+ }
foo(zz = this) { zz.x; }
->foo : Symbol(P.foo, Decl(thisInConstructorParameter2.ts, 4, 47))
->zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 6, 8))
+>foo : Symbol(P.foo, Decl(thisInConstructorParameter2.ts, 6, 5))
+>zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 8, 8))
>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
>zz.x : Symbol(P.x, Decl(thisInConstructorParameter2.ts, 0, 9))
->zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 6, 8))
+>zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 8, 8))
>x : Symbol(P.x, Decl(thisInConstructorParameter2.ts, 0, 9))
static bar(zz = this) { zz.y; }
->bar : Symbol(P.bar, Decl(thisInConstructorParameter2.ts, 6, 28))
->zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 7, 15))
+>bar : Symbol(P.bar, Decl(thisInConstructorParameter2.ts, 8, 28))
+>zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 9, 15))
>this : Symbol(P, Decl(thisInConstructorParameter2.ts, 0, 0))
>zz.y : Symbol(P.y, Decl(thisInConstructorParameter2.ts, 1, 13))
->zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 7, 15))
+>zz : Symbol(zz, Decl(thisInConstructorParameter2.ts, 9, 15))
>y : Symbol(P.y, Decl(thisInConstructorParameter2.ts, 1, 13))
}
diff --git a/tests/baselines/reference/thisInConstructorParameter2.types b/tests/baselines/reference/thisInConstructorParameter2.types
index 73c5f4d7362..69198bafa5f 100644
--- a/tests/baselines/reference/thisInConstructorParameter2.types
+++ b/tests/baselines/reference/thisInConstructorParameter2.types
@@ -10,11 +10,25 @@ class P {
>y : typeof P
>this : typeof P
- constructor(public z = this, zz = this) { }
+ constructor(public z = this, zz = this, zzz = (p = this) => this) {
>z : this
>this : this
>zz : this
>this : this
+>zzz : (p?: this) => this
+>(p = this) => this : (p?: this) => this
+>p : this
+>this : this
+>this : this
+
+ zzz = (p = this) => this;
+>zzz = (p = this) => this : (p?: this) => this
+>zzz : (p?: this) => this
+>(p = this) => this : (p?: this) => this
+>p : this
+>this : this
+>this : this
+ }
foo(zz = this) { zz.x; }
>foo : (zz?: this) => void
diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.issue24709.js b/tests/baselines/reference/transformApi/transformsCorrectly.issue24709.js
new file mode 100644
index 00000000000..9d1d48ca96d
--- /dev/null
+++ b/tests/baselines/reference/transformApi/transformsCorrectly.issue24709.js
@@ -0,0 +1,6 @@
+var X = /** @class */ (function () {
+ function X() {
+ }
+ X.prototype.foobar = function (x) { return x; };
+ return X;
+}());
diff --git a/tests/baselines/reference/typecheckIfCondition.errors.txt b/tests/baselines/reference/typecheckIfCondition.errors.txt
index 5a9255f7f85..e9c3707583e 100644
--- a/tests/baselines/reference/typecheckIfCondition.errors.txt
+++ b/tests/baselines/reference/typecheckIfCondition.errors.txt
@@ -1,5 +1,5 @@
-tests/cases/compiler/typecheckIfCondition.ts(4,10): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
-tests/cases/compiler/typecheckIfCondition.ts(4,26): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+tests/cases/compiler/typecheckIfCondition.ts(4,10): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+tests/cases/compiler/typecheckIfCondition.ts(4,26): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
==== tests/cases/compiler/typecheckIfCondition.ts (2 errors) ====
@@ -8,9 +8,9 @@ tests/cases/compiler/typecheckIfCondition.ts(4,26): error TS2580: Cannot find na
{
if (!module.exports) module.exports = "";
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
~~~~~~
-!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
var x = null; // don't want to baseline output
}
\ No newline at end of file
diff --git a/tests/baselines/reference/typingsSuggestion1.errors.txt b/tests/baselines/reference/typingsSuggestion1.errors.txt
new file mode 100644
index 00000000000..88766c2a613
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion1.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/conformance/typings/a.ts(1,1): error TS2591: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+
+
+==== tests/cases/conformance/typings/tsconfig.json (0 errors) ====
+ { "compilerOptions": {"types": []} }
+
+==== tests/cases/conformance/typings/a.ts (1 errors) ====
+ module.exports = 1;
+ ~~~~~~
+!!! error TS2591: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/typingsSuggestion1.js b/tests/baselines/reference/typingsSuggestion1.js
new file mode 100644
index 00000000000..b3ba53b1134
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion1.js
@@ -0,0 +1,6 @@
+//// [a.ts]
+module.exports = 1;
+
+
+//// [a.js]
+module.exports = 1;
diff --git a/tests/baselines/reference/typingsSuggestion1.symbols b/tests/baselines/reference/typingsSuggestion1.symbols
new file mode 100644
index 00000000000..f2f77a4389f
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion1.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/typings/a.ts ===
+module.exports = 1;
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/typingsSuggestion1.types b/tests/baselines/reference/typingsSuggestion1.types
new file mode 100644
index 00000000000..3dfbb761101
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion1.types
@@ -0,0 +1,8 @@
+=== tests/cases/conformance/typings/a.ts ===
+module.exports = 1;
+>module.exports = 1 : 1
+>module.exports : any
+>module : any
+>exports : any
+>1 : 1
+
diff --git a/tests/baselines/reference/typingsSuggestion2.errors.txt b/tests/baselines/reference/typingsSuggestion2.errors.txt
new file mode 100644
index 00000000000..de196446d3d
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion2.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/conformance/typings/a.ts(1,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+
+
+==== tests/cases/conformance/typings/tsconfig.json (0 errors) ====
+ { "compilerOptions": {} }
+
+==== tests/cases/conformance/typings/a.ts (1 errors) ====
+ module.exports = 1;
+ ~~~~~~
+!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node`.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/typingsSuggestion2.js b/tests/baselines/reference/typingsSuggestion2.js
new file mode 100644
index 00000000000..b3ba53b1134
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion2.js
@@ -0,0 +1,6 @@
+//// [a.ts]
+module.exports = 1;
+
+
+//// [a.js]
+module.exports = 1;
diff --git a/tests/baselines/reference/typingsSuggestion2.symbols b/tests/baselines/reference/typingsSuggestion2.symbols
new file mode 100644
index 00000000000..f2f77a4389f
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion2.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/typings/a.ts ===
+module.exports = 1;
+No type information for this code.
+No type information for this code.
\ No newline at end of file
diff --git a/tests/baselines/reference/typingsSuggestion2.types b/tests/baselines/reference/typingsSuggestion2.types
new file mode 100644
index 00000000000..3dfbb761101
--- /dev/null
+++ b/tests/baselines/reference/typingsSuggestion2.types
@@ -0,0 +1,8 @@
+=== tests/cases/conformance/typings/a.ts ===
+module.exports = 1;
+>module.exports = 1 : 1
+>module.exports : any
+>module : any
+>exports : any
+>1 : 1
+
diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log
index bfb66f46a67..7ae2531d383 100644
--- a/tests/baselines/reference/user/chrome-devtools-frontend.log
+++ b/tests/baselines/reference/user/chrome-devtools-frontend.log
@@ -759,7 +759,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth
Type 'number' is not assignable to type 'void'.
node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(19744,7): error TS2339: Property 'expected' does not exist on type 'Error'.
node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(20005,8): error TS2339: Property 'runLighthouseForConnection' does not exist on type 'Window'.
-node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(20015,1): error TS2554: Expected 0 arguments, but got 1.
node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(20035,8): error TS2339: Property 'runLighthouseInWorker' does not exist on type 'Window'.
node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(20039,15): error TS2339: Property 'runLighthouseForConnection' does not exist on type 'Window'.
node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(20046,8): error TS2339: Property 'getDefaultCategories' does not exist on type 'Window'.
diff --git a/tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts b/tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts
new file mode 100644
index 00000000000..e68be5b7bfd
--- /dev/null
+++ b/tests/cases/compiler/contextuallyTypedParametersWithInitializers.ts
@@ -0,0 +1,32 @@
+// @strict: true
+// @declaration: true
+
+declare function id1(input: T): T;
+declare function id2 any>(input: T): T;
+declare function id3 any>(input: T): T;
+declare function id4 any>(input: T): T;
+declare function id5 any>(input: T): T;
+
+const f10 = function ({ foo = 42 }) { return foo };
+const f11 = id1(function ({ foo = 42 }) { return foo }); // Implicit any error
+const f12 = id2(function ({ foo = 42 }) { return foo });
+const f13 = id3(function ({ foo = 42 }) { return foo });
+const f14 = id4(function ({ foo = 42 }) { return foo });
+
+const f20 = function (foo = 42) { return foo };
+const f21 = id1(function (foo = 42) { return foo }); // Implicit any error
+const f22 = id2(function (foo = 42) { return foo });
+const f25 = id5(function (foo = 42) { return foo });
+
+// Repro from #28816
+
+function id(input: T): T { return input }
+
+function getFoo ({ foo = 42 }) {
+ return foo;
+}
+
+const newGetFoo = id(getFoo);
+const newGetFoo2 = id(function getFoo ({ foo = 42 }) {
+ return foo;
+});
diff --git a/tests/cases/compiler/thisInConstructorParameter2.ts b/tests/cases/compiler/thisInConstructorParameter2.ts
index 2b09d2bb7e7..18d35bea341 100644
--- a/tests/cases/compiler/thisInConstructorParameter2.ts
+++ b/tests/cases/compiler/thisInConstructorParameter2.ts
@@ -2,7 +2,9 @@ class P {
x = this;
static y = this;
- constructor(public z = this, zz = this) { }
+ constructor(public z = this, zz = this, zzz = (p = this) => this) {
+ zzz = (p = this) => this;
+ }
foo(zz = this) { zz.x; }
static bar(zz = this) { zz.y; }
diff --git a/tests/cases/conformance/expressions/typeAssertions/constAssertions.ts b/tests/cases/conformance/expressions/typeAssertions/constAssertions.ts
new file mode 100644
index 00000000000..e2ce7aba993
--- /dev/null
+++ b/tests/cases/conformance/expressions/typeAssertions/constAssertions.ts
@@ -0,0 +1,67 @@
+// @strict: true
+// @declaration: true
+// @target: esnext
+
+let v1 = 'abc' as const;
+let v2 = `abc` as const;
+let v3 = 10 as const;
+let v4 = -10 as const;
+let v5 = +10 as const;
+let v6 = 10n as const;
+let v7 = -10n as const;
+let v8 = true as const;
+let v9 = false as const;
+
+let c1 = 'abc' as const;
+let c2 = `abc` as const;
+let c3 = 10 as const;
+let c4 = -10 as const;
+let c5 = +10 as const;
+let c6 = 10n as const;
+let c7 = -10n as const;
+let c8 = true as const;
+let c9 = false as const;
+
+let vv1 = v1;
+let vc1 = c1;
+
+let a1 = [] as const;
+let a2 = [1, 2, 3] as const;
+let a3 = [10, 'hello', true] as const;
+let a4 = [...[1, 2, 3]] as const;
+let a5 = [1, 2, 3];
+let a6 = [...a5] as const;
+let a7 = [...a6];
+let a8 = ['abc', ...a7] as const;
+let a9 = [...a8];
+
+declare let d: { [x: string]: string };
+
+let o1 = { x: 10, y: 20 } as const;
+let o2 = { a: 1, 'b': 2, ['c']: 3, d() {}, ['e' + '']: 4 } as const;
+let o3 = { ...o1, ...o2 } as const;
+let o4 = { a: 1, b: 2 };
+let o5 = { ...o4 } as const;
+let o6 = { ...o5 };
+let o7 = { ...d } as const;
+let o8 = { ...o7 };
+let o9 = { x: 10, foo() { this.x = 20 } } as const; // Error
+
+let p1 = (10) as const;
+let p2 = ((-10)) as const;
+let p3 = ([(10)]) as const;
+let p4 = [[[[10]]]] as const;
+
+let x1 = { x: 10, y: [20, 30], z: { a: { b: 42 } } } as const;
+
+let q1 = 10;
+let q2 = 'abc';
+let q3 = true;
+let q4 = [1, 2, 3];
+let q5 = { x: 10, y: 20 };
+
+declare function id(x: T): T;
+
+let e1 = v1 as const; // Error
+let e2 = (true ? 1 : 0) as const; // Error
+let e3 = id(1) as const; // Error
diff --git a/tests/cases/conformance/typings/typingsSuggestion1.ts b/tests/cases/conformance/typings/typingsSuggestion1.ts
new file mode 100644
index 00000000000..68efd308b6d
--- /dev/null
+++ b/tests/cases/conformance/typings/typingsSuggestion1.ts
@@ -0,0 +1,5 @@
+// @filename: tsconfig.json
+{ "compilerOptions": {"types": []} }
+
+// @filename: a.ts
+module.exports = 1;
diff --git a/tests/cases/conformance/typings/typingsSuggestion2.ts b/tests/cases/conformance/typings/typingsSuggestion2.ts
new file mode 100644
index 00000000000..013155dedd7
--- /dev/null
+++ b/tests/cases/conformance/typings/typingsSuggestion2.ts
@@ -0,0 +1,5 @@
+// @filename: tsconfig.json
+{ "compilerOptions": {} }
+
+// @filename: a.ts
+module.exports = 1;