diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 99488cad775f1..efcd1bc8b7c78 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -797,6 +797,7 @@ import { JsxAttributeLike, JsxAttributeName, JsxAttributes, + JsxAttributeValue, JsxChild, JsxClosingElement, JsxElement, @@ -6456,6 +6457,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return { typeToTypeNode: (type: Type, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => typeToTypeNodeHelper(type, context)), typePredicateToTypePredicateNode: (typePredicate: TypePredicate, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => typePredicateToTypePredicateNodeHelper(typePredicate, context)), + expressionOrTypeToTypeNode: (expr: Expression | JsxAttributeValue | undefined, type: Type, addUndefined?: boolean, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => expressionOrTypeToTypeNode(context, expr, type, addUndefined)), + serializeTypeForDeclaration: (type: Type, symbol: Symbol, addUndefined?: boolean, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, /*includePrivateSymbol*/ undefined, /*bundled*/ undefined, addUndefined)), indexInfoToIndexSignatureDeclaration: (indexInfo: IndexInfo, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined)), signatureToSignatureDeclaration: (signature: Signature, kind: SignatureDeclaration["kind"], enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => signatureToSignatureDeclarationHelper(signature, kind, context)), symbolToEntityName: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => symbolToName(symbol, context, meaning, /*expectsIdentifier*/ false)), @@ -6467,6 +6470,73 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { symbolToNode: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => withContext(enclosingDeclaration, flags, tracker, context => symbolToNode(symbol, context, meaning)), }; + function expressionOrTypeToTypeNode(context: NodeBuilderContext, expr: Expression | JsxAttributeValue | undefined, type: Type, addUndefined?: boolean) { + if (expr) { + const typeNode = isAssertionExpression(expr) ? expr.type + : isJSDocTypeAssertion(expr) ? getJSDocTypeAssertionType(expr) + : undefined; + if (typeNode && !isConstTypeReference(typeNode)) { + const result = tryReuseExistingTypeNode(context, typeNode, type, expr.parent, addUndefined); + if (result) { + return result; + } + } + } + + if (addUndefined) { + type = getOptionalType(type); + } + + return typeToTypeNodeHelper(type, context); + } + + function tryReuseExistingTypeNode( + context: NodeBuilderContext, + typeNode: TypeNode, + type: Type, + host: Node, + addUndefined?: boolean, + includePrivateSymbol?: (s: Symbol) => void, + bundled?: boolean, + ) { + const originalType = type; + if (addUndefined) { + type = getOptionalType(type); + } + const clone = tryReuseExistingNonParameterTypeNode(context, typeNode, type, host, includePrivateSymbol, bundled); + if (clone) { + if (addUndefined && !someType(getTypeFromTypeNode(typeNode), t => !!(t.flags & TypeFlags.Undefined))) { + return factory.createUnionTypeNode([clone, factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword)]); + } + return clone; + } + if (addUndefined && originalType !== type) { + const cloneMissingUndefined = tryReuseExistingNonParameterTypeNode(context, typeNode, originalType, host, includePrivateSymbol, bundled); + if (cloneMissingUndefined) { + return factory.createUnionTypeNode([cloneMissingUndefined, factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword)]); + } + } + return undefined; + } + + function tryReuseExistingNonParameterTypeNode( + context: NodeBuilderContext, + existing: TypeNode, + type: Type, + host = context.enclosingDeclaration, + includePrivateSymbol?: (s: Symbol) => void, + bundled?: boolean, + annotationType?: Type, + ) { + if (typeNodeIsEquivalentToType(existing, host, type, annotationType) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type)) { + const result = tryReuseExistingTypeNodeHelper(context, existing, includePrivateSymbol, bundled); + if (result) { + return result; + } + } + return undefined; + } + function symbolToNode(symbol: Symbol, context: NodeBuilderContext, meaning: SymbolFlags) { if (context.flags & NodeBuilderFlags.WriteComputedProps) { if (symbol.valueDeclaration) { @@ -6916,8 +6986,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (isInstantiationExpressionType) { const instantiationExpressionType = type as InstantiationExpressionType; const existing = instantiationExpressionType.node; - if (isTypeQueryNode(existing) && getTypeFromTypeNode(existing) === type) { - const typeNode = serializeExistingTypeNode(context, existing); + if (isTypeQueryNode(existing)) { + const typeNode = tryReuseExistingNonParameterTypeNode(context, existing, type); if (typeNode) { return typeNode; } @@ -7807,11 +7877,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext, preserveModifierFlags?: boolean, privateSymbolVisitor?: (s: Symbol) => void, bundledImports?: boolean): ParameterDeclaration { const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol); - let parameterType = getTypeOfSymbol(parameterSymbol); - if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { - parameterType = getOptionalType(parameterType); - } - const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, privateSymbolVisitor, bundledImports); + const parameterType = getTypeOfSymbol(parameterSymbol); + const addUndefined = parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration); + const parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, privateSymbolVisitor, bundledImports, addUndefined); const modifiers = !(context.flags & NodeBuilderFlags.OmitParameterModifiers) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : undefined; const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & CheckFlags.RestParameter; @@ -8465,17 +8533,15 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { * Unlike `typeToTypeNodeHelper`, this handles setting up the `AllowUniqueESSymbolType` flag * so a `unique symbol` is returned when appropriate for the input symbol, rather than `typeof sym` */ - function serializeTypeForDeclaration(context: NodeBuilderContext, type: Type, symbol: Symbol, enclosingDeclaration: Node | undefined, includePrivateSymbol?: (s: Symbol) => void, bundled?: boolean) { + function serializeTypeForDeclaration(context: NodeBuilderContext, type: Type, symbol: Symbol, enclosingDeclaration: Node | undefined, includePrivateSymbol?: (s: Symbol) => void, bundled?: boolean, addUndefined?: boolean) { if (!isErrorType(type) && enclosingDeclaration) { const declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration)); if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) { // try to reuse the existing annotation const existing = getEffectiveTypeAnnotationNode(declWithExistingAnnotation)!; - if (typeNodeIsEquivalentToType(existing, declWithExistingAnnotation, type) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type)) { - const result = serializeExistingTypeNode(context, existing, includePrivateSymbol, bundled); - if (result) { - return result; - } + const result = tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined, includePrivateSymbol, bundled); + if (result) { + return result; } } } @@ -8486,17 +8552,20 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { ) { context.flags |= NodeBuilderFlags.AllowUniqueESSymbolType; } - const result = typeToTypeNodeHelper(type, context); + + const decl = symbol.valueDeclaration ?? symbol.declarations?.[0]; + const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : undefined; + + const result = expressionOrTypeToTypeNode(context, expr, type, addUndefined); context.flags = oldFlags; return result; } - function typeNodeIsEquivalentToType(typeNode: TypeNode, annotatedDeclaration: Declaration, type: Type) { - const typeFromTypeNode = getTypeFromTypeNode(typeNode); + function typeNodeIsEquivalentToType(typeNode: TypeNode, annotatedDeclaration: Node | undefined, type: Type, typeFromTypeNode = getTypeFromTypeNode(typeNode)) { if (typeFromTypeNode === type) { return true; } - if (isParameter(annotatedDeclaration) && annotatedDeclaration.questionToken) { + if (annotatedDeclaration && (isParameter(annotatedDeclaration) || isPropertyDeclaration(annotatedDeclaration)) && annotatedDeclaration.questionToken) { return getTypeWithFacts(type, TypeFacts.NEUndefined) === typeFromTypeNode; } return false; @@ -8509,11 +8578,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (!!findAncestor(annotation, n => n === enclosingDeclarationIgnoringFakeScope) && annotation) { const annotated = getTypeFromTypeNode(annotation); const thisInstantiated = annotated.flags & TypeFlags.TypeParameter && (annotated as TypeParameter).isThisType ? instantiateType(annotated, signature.mapper) : annotated; - if (thisInstantiated === type && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(annotation, type)) { - const result = serializeExistingTypeNode(context, annotation, includePrivateSymbol, bundled); - if (result) { - return result; - } + const result = tryReuseExistingNonParameterTypeNode(context, annotation, type, signature.declaration, includePrivateSymbol, bundled, thisInstantiated); + if (result) { + return result; } } } @@ -8530,7 +8597,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const sym = resolveEntityName(leftmost, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true); if (sym) { if (isSymbolAccessible(sym, context.enclosingDeclaration, SymbolFlags.All, /*shouldComputeAliasesToMakeVisible*/ false).accessibility !== SymbolAccessibility.Accessible) { - introducesError = true; + if (!isDeclarationName(node)) { + introducesError = true; + } } else { context.tracker.trackSymbol(sym, context.enclosingDeclaration, SymbolFlags.All); @@ -8547,7 +8616,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return { introducesError, node }; } - function serializeExistingTypeNode(context: NodeBuilderContext, existing: TypeNode, includePrivateSymbol?: (s: Symbol) => void, bundled?: boolean) { + /** + * Do you mean to call this directly? You probably should use `tryReuseExistingTypeNode` instead, + * which performs sanity checking on the type before doing this. + */ + function tryReuseExistingTypeNodeHelper(context: NodeBuilderContext, existing: TypeNode, includePrivateSymbol?: (s: Symbol) => void, bundled?: boolean) { if (cancellationToken && cancellationToken.throwIfCancellationRequested) { cancellationToken.throwIfCancellationRequested(); } @@ -8669,6 +8742,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { node.isTypeOf, ); } + if (isParameter(node)) { + if (!node.type && !node.initializer) { + return factory.updateParameterDeclaration(node, /*modifiers*/ undefined, node.dotDotDotToken, visitEachChild(node.name, visitExistingNodeTreeSymbols, /*context*/ undefined), node.questionToken, factory.createKeywordTypeNode(SyntaxKind.AnyKeyword), /*initializer*/ undefined); + } + } + if (isPropertySignature(node)) { + if (!node.type && !node.initializer) { + return factory.updatePropertySignature(node, node.modifiers, node.name, node.questionToken, factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)); + } + } if (isEntityName(node) || isEntityNameExpression(node)) { const { introducesError, node: result } = trackExistingEntityName(node, context, includePrivateSymbol); @@ -8678,7 +8761,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } } - if (file && isTupleTypeNode(node) && (getLineAndCharacterOfPosition(file, node.pos).line === getLineAndCharacterOfPosition(file, node.end).line)) { + if (file && isTupleTypeNode(node) && !nodeIsSynthesized(node) && (getLineAndCharacterOfPosition(file, node.pos).line === getLineAndCharacterOfPosition(file, node.end).line)) { setEmitFlags(node, EmitFlags.SingleLine); } @@ -9272,7 +9355,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { context.enclosingDeclaration = jsdocAliasDecl; const typeNode = jsdocAliasDecl && jsdocAliasDecl.typeExpression && isJSDocTypeExpression(jsdocAliasDecl.typeExpression) - && serializeExistingTypeNode(context, jsdocAliasDecl.typeExpression.type, includePrivateSymbol, bundled) + && tryReuseExistingNonParameterTypeNode(context, jsdocAliasDecl.typeExpression.type, aliasType, /*host*/ undefined, includePrivateSymbol, bundled) || typeToTypeNodeHelper(aliasType, context); addResult( setSyntheticLeadingComments( @@ -9503,7 +9586,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return cleanup(factory.createExpressionWithTypeArguments( expr, map(e.typeArguments, a => - serializeExistingTypeNode(context, a, includePrivateSymbol, bundled) + tryReuseExistingNonParameterTypeNode(context, a, getTypeFromTypeNode(a), /*host*/ undefined, includePrivateSymbol, bundled) || typeToTypeNodeHelper(getTypeFromTypeNode(a), context)), )); @@ -9961,6 +10044,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it) const ctxSrc = getSourceFileOfNode(context.enclosingDeclaration); return getObjectFlags(typeToSerialize) & (ObjectFlags.Anonymous | ObjectFlags.Mapped) && + !some(typeToSerialize.symbol?.declarations, isTypeNode) && // If the type comes straight from a type node, we shouldn't try to break it up !length(getIndexInfosOfType(typeToSerialize)) && !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class !!(length(filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || length(getSignaturesOfType(typeToSerialize, SignatureKind.Call))) && @@ -48567,19 +48651,56 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } // Get type of the symbol if this is the valid symbol otherwise get type at location const symbol = getSymbolOfDeclaration(declaration); - let type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature)) + const type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType; - if ( - type.flags & TypeFlags.UniqueESSymbol && - type.symbol === symbol - ) { - flags |= NodeBuilderFlags.AllowUniqueESSymbolType; - } - if (addUndefined) { - type = getOptionalType(type); + + return nodeBuilder.serializeTypeForDeclaration(type, symbol, addUndefined, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); + } + + type DeclarationWithPotentialInnerNodeReuse = + | SignatureDeclaration + | AccessorDeclaration + | VariableLikeDeclaration + | PropertyAccessExpression + | ExportAssignment; + + function isDeclarationWithPossibleInnerTypeNodeReuse(declaration: Declaration): declaration is DeclarationWithPotentialInnerNodeReuse { + return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration); + } + + function getPossibleTypeNodeReuseExpression(declaration: DeclarationWithPotentialInnerNodeReuse) { + return isFunctionLike(declaration) && !isSetAccessor(declaration) + ? getSingleReturnExpression(declaration) + : isExportAssignment(declaration) + ? declaration.expression + : !!(declaration as HasInitializer).initializer + ? (declaration as HasInitializer & typeof declaration).initializer + : isParameter(declaration) && isSetAccessor(declaration.parent) + ? getSingleReturnExpression(getAllAccessorDeclarations(getSymbolOfDeclaration(declaration.parent)?.declarations, declaration.parent).getAccessor) + : undefined; + } + + function getSingleReturnExpression(declaration: SignatureDeclaration | undefined): Expression | undefined { + let candidateExpr: Expression | undefined; + if (declaration && !nodeIsMissing((declaration as FunctionLikeDeclaration).body)) { + const body = (declaration as FunctionLikeDeclaration).body; + if (body && isBlock(body)) { + forEachReturnStatement(body, s => { + if (!candidateExpr) { + candidateExpr = s.expression; + } + else { + candidateExpr = undefined; + return true; + } + }); + } + else { + candidateExpr = body; + } } - return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); + return candidateExpr; } function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn: SignatureDeclaration, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker) { @@ -48593,7 +48714,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // Inferred type predicates return nodeBuilder.typePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); } - return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); + return nodeBuilder.expressionOrTypeToTypeNode(getPossibleTypeNodeReuseExpression(signatureDeclaration), getReturnTypeOfSignature(signature), /*addUndefined*/ undefined, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); } function createTypeOfExpression(exprIn: Expression, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker) { @@ -48602,7 +48723,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return factory.createToken(SyntaxKind.AnyKeyword) as KeywordTypeNode; } const type = getWidenedType(getRegularTypeOfExpression(expr)); - return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); + return nodeBuilder.expressionOrTypeToTypeNode(expr, type, /*addUndefined*/ undefined, enclosingDeclaration, flags | NodeBuilderFlags.MultilineObjectLiterals, tracker); } function hasGlobalName(name: string): boolean { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index e6d6ac12125a3..357921a190394 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -6517,7 +6517,7 @@ export function identifierIsThisKeyword(id: Identifier): boolean { } /** @internal */ -export function getAllAccessorDeclarations(declarations: readonly Declaration[], accessor: AccessorDeclaration): AllAccessorDeclarations { +export function getAllAccessorDeclarations(declarations: readonly Declaration[] | undefined, accessor: AccessorDeclaration): AllAccessorDeclarations { // TODO: GH#18217 let firstAccessor!: AccessorDeclaration; let secondAccessor!: AccessorDeclaration; diff --git a/tests/baselines/reference/annotatedThisPropertyInitializerDoesntNarrow.types b/tests/baselines/reference/annotatedThisPropertyInitializerDoesntNarrow.types index f257b2b453176..45267a2357356 100644 --- a/tests/baselines/reference/annotatedThisPropertyInitializerDoesntNarrow.types +++ b/tests/baselines/reference/annotatedThisPropertyInitializerDoesntNarrow.types @@ -4,7 +4,7 @@ // from webpack/lib/Compilation.js and filed at #26427 /** @param {{ [s: string]: number }} map */ function mappy(map) {} ->mappy : (map: { [s: string]: number; }) => void +>mappy : (map: { [s: string]: number;}) => void >map : { [s: string]: number; } export class C { diff --git a/tests/baselines/reference/anonterface.types b/tests/baselines/reference/anonterface.types index 74274684848d7..59405729860ad 100644 --- a/tests/baselines/reference/anonterface.types +++ b/tests/baselines/reference/anonterface.types @@ -8,7 +8,7 @@ module M { >C : C m(fn:{ (n:number):string; },n2:number):string { ->m : (fn: (n: number) => string, n2: number) => string +>m : (fn: { (n: number): string;}, n2: number) => string >fn : (n: number) => string >n : number >n2 : number diff --git a/tests/baselines/reference/arrayLiteralContextualType.types b/tests/baselines/reference/arrayLiteralContextualType.types index 5af5173d6112b..d1608304a946c 100644 --- a/tests/baselines/reference/arrayLiteralContextualType.types +++ b/tests/baselines/reference/arrayLiteralContextualType.types @@ -35,7 +35,7 @@ function foo(animals: IAnimal[]) { } >animals : IAnimal[] function bar(animals: { [n: number]: IAnimal }) { } ->bar : (animals: { [n: number]: IAnimal; }) => void +>bar : (animals: { [n: number]: IAnimal;}) => void >animals : { [n: number]: IAnimal; } >n : number diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types index c73ecb914c3bf..62cb6fadbe7de 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types @@ -130,7 +130,7 @@ var a17: { }; var a18: { ->a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } +>a18 : { (x: { (a: number): number; (a: string): string;}): any[]; (x: { (a: boolean): boolean; (a: Date): Date;}): any[]; } (x: { >x : { (a: number): number; (a: string): string; } diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures4.types b/tests/baselines/reference/assignmentCompatWithCallSignatures4.types index 8cb1642ff718e..ec644d70aa889 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures4.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures4.types @@ -81,7 +81,7 @@ module Errors { >b : number var a16: { ->a16 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; } +>a16 : { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; } (x: { >x : { (a: number): number; (a?: number): number; } diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types index 8bf8a3a79f3d8..02c9dddbcc30f 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types @@ -130,7 +130,7 @@ var a17: { }; var a18: { ->a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } +>a18 : { new (x: { new (a: number): number; new (a: string): string;}): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date;}): any[]; } new (x: { >x : { new (a: number): number; new (a: string): string; } diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures4.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures4.types index e854003d55ecc..d58c6ad783bdd 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures4.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures4.types @@ -81,7 +81,7 @@ module Errors { >b : number var a16: { ->a16 : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; } +>a16 : { new (x: { new (a: number): number; new (a?: number): number;}): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean;}): boolean[]; } new (x: { >x : { new (a: number): number; new (a?: number): number; } diff --git a/tests/baselines/reference/asyncFunctionContextuallyTypedReturns.types b/tests/baselines/reference/asyncFunctionContextuallyTypedReturns.types index a6bad3686e8a0..1873363c7dcee 100644 --- a/tests/baselines/reference/asyncFunctionContextuallyTypedReturns.types +++ b/tests/baselines/reference/asyncFunctionContextuallyTypedReturns.types @@ -104,7 +104,7 @@ h(async v => v ? (def) => { } : Promise.reject()); // repro from #29196 const increment: ( ->increment : (num: number, str: string) => string | Promise any)> +>increment : (num: number, str: string) => Promise<((s: string) => any) | string> | string num: number, >num : number @@ -130,7 +130,7 @@ const increment: ( } const increment2: ( ->increment2 : (num: number, str: string) => Promise any)> +>increment2 : (num: number, str: string) => Promise<((s: string) => any) | string> num: number, >num : number diff --git a/tests/baselines/reference/asyncFunctionsAndStrictNullChecks.types b/tests/baselines/reference/asyncFunctionsAndStrictNullChecks.types index cde481af55d4a..e0dadb0d89de0 100644 --- a/tests/baselines/reference/asyncFunctionsAndStrictNullChecks.types +++ b/tests/baselines/reference/asyncFunctionsAndStrictNullChecks.types @@ -4,7 +4,7 @@ declare namespace Windows.Foundation { interface IPromise { then(success?: (value: TResult) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; ->then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_1) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } +>then : { (success?: (value: TResult) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_1) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } >success : ((value: TResult) => IPromise) | undefined >value : TResult >error : ((error: any) => IPromise) | undefined @@ -13,7 +13,7 @@ declare namespace Windows.Foundation { >progress : any then(success?: (value: TResult) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; ->then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } +>then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: (value: TResult) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } >success : ((value: TResult) => IPromise) | undefined >value : TResult >error : ((error: any) => U) | undefined @@ -22,7 +22,7 @@ declare namespace Windows.Foundation { >progress : any then(success?: (value: TResult) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; ->then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } +>then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: (value: TResult) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } >success : ((value: TResult) => U) | undefined >value : TResult >error : ((error: any) => IPromise) | undefined @@ -31,7 +31,7 @@ declare namespace Windows.Foundation { >progress : any then(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; ->then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; } +>then : { (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => IPromise) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => IPromise) | undefined, progress?: ((progress: any) => void) | undefined): IPromise; (success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } >success : ((value: TResult) => U) | undefined >value : TResult >error : ((error: any) => U) | undefined @@ -40,7 +40,7 @@ declare namespace Windows.Foundation { >progress : any done(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void; ->done : (success?: ((value: TResult) => any) | undefined, error?: ((error: any) => any) | undefined, progress?: ((progress: any) => void) | undefined) => void +>done : (success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void) => void >success : ((value: TResult) => any) | undefined >value : TResult >error : ((error: any) => any) | undefined diff --git a/tests/baselines/reference/avoidNarrowingUsingConstVariableFromBindingElementWithLiteralInitializer.types b/tests/baselines/reference/avoidNarrowingUsingConstVariableFromBindingElementWithLiteralInitializer.types index 24155c1a02085..649ba1345430e 100644 --- a/tests/baselines/reference/avoidNarrowingUsingConstVariableFromBindingElementWithLiteralInitializer.types +++ b/tests/baselines/reference/avoidNarrowingUsingConstVariableFromBindingElementWithLiteralInitializer.types @@ -5,7 +5,7 @@ declare const foo: ["a", string, number] | ["b", string, boolean]; >foo : ["a", string, number] | ["b", string, boolean] export function test(arg: { index?: number }) { ->test : (arg: { index?: number | undefined; }) => void +>test : (arg: { index?: number;}) => void >arg : { index?: number | undefined; } >index : number | undefined diff --git a/tests/baselines/reference/awaitedTypeStrictNull.types b/tests/baselines/reference/awaitedTypeStrictNull.types index 3aab16f161bfb..4c794d3bcbc87 100644 --- a/tests/baselines/reference/awaitedTypeStrictNull.types +++ b/tests/baselines/reference/awaitedTypeStrictNull.types @@ -175,7 +175,7 @@ interface Obj { x: number } >x : number async function fn(): Promise { ->fn : () => Promise +>fn : () => Promise // Per #45924, this was failing due to incorrect inference both above and here. // Should not error. diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types index 3e0c95356ae27..65468978985a7 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types @@ -134,7 +134,7 @@ interface A { // T }; a18: { ->a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } +>a18 : { (x: { (a: number): number; (a: string): string;}): any[]; (x: { (a: boolean): boolean; (a: Date): Date;}): any[]; } (x: { >x : { (a: number): number; (a: string): string; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance3.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance3.types index 19516ba55bde1..33b648a0d18cb 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance3.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance3.types @@ -81,7 +81,7 @@ module Errors { >b : number a16: { ->a16 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; } +>a16 : { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; } // type of parameter is overload set which means we can't do inference based on this type (x: { diff --git a/tests/baselines/reference/callsOnComplexSignatures.types b/tests/baselines/reference/callsOnComplexSignatures.types index 86c9497e8ffa1..d28003ca6a253 100644 --- a/tests/baselines/reference/callsOnComplexSignatures.types +++ b/tests/baselines/reference/callsOnComplexSignatures.types @@ -53,13 +53,13 @@ function test2() { interface Messages { readonly foo: (options: { [key: string]: any, b: number }) => string; ->foo : (options: { [key: string]: any; b: number; }) => string +>foo : (options: { [key: string]: any; b: number;}) => string >options : { [key: string]: any; b: number; } >key : string >b : number readonly bar: (options: { [key: string]: any, a: string }) => string; ->bar : (options: { [key: string]: any; a: string; }) => string +>bar : (options: { [key: string]: any; a: string;}) => string >options : { [key: string]: any; a: string; } >key : string >a : string diff --git a/tests/baselines/reference/capturedParametersInInitializers1.types b/tests/baselines/reference/capturedParametersInInitializers1.types index 53199555c3412..7173e5cb9e570 100644 --- a/tests/baselines/reference/capturedParametersInInitializers1.types +++ b/tests/baselines/reference/capturedParametersInInitializers1.types @@ -35,9 +35,9 @@ let a; >a : any function foo3(y = { x: a }, z = 1) { ->foo3 : (y?: { x: number; }, z?: number) => void ->y : { x: number; } ->{ x: a } : { x: number; } +>foo3 : (y?: { x: typeof z; }, z?: number) => void +>y : { x: typeof z; } +>{ x: a } : { x: typeof z; } >x : number >a : number >z : number diff --git a/tests/baselines/reference/coAndContraVariantInferences.js b/tests/baselines/reference/coAndContraVariantInferences.js index c9a631188e636..060d7dc0c22fa 100644 --- a/tests/baselines/reference/coAndContraVariantInferences.js +++ b/tests/baselines/reference/coAndContraVariantInferences.js @@ -70,7 +70,7 @@ interface Action { name: TName; payload: TPayload; } -declare const actionA: Action<"ACTION_A", string>; -declare const actionB: Action<"ACTION_B", boolean>; +declare const actionA: Action<'ACTION_A', string>; +declare const actionB: Action<'ACTION_B', boolean>; declare function call(action: Action, fn: (action: Action) => any): void; declare const printFn: (action: typeof actionA | typeof actionB) => void; diff --git a/tests/baselines/reference/collisionArgumentsInType.types b/tests/baselines/reference/collisionArgumentsInType.types index 044a9cbf3cbe5..c698d5e4f7f01 100644 --- a/tests/baselines/reference/collisionArgumentsInType.types +++ b/tests/baselines/reference/collisionArgumentsInType.types @@ -12,7 +12,7 @@ var v12: (arguments: number, ...restParameters) => void; // no error - no code g >restParameters : any[] var v2: { ->v2 : { (arguments: number, ...restParameters: any[]): any; new (arguments: number, ...restParameters: any[]): any; foo(arguments: number, ...restParameters: any[]): any; prop: (arguments: number, ...restParameters: any[]) => void; } +>v2 : { (arguments: number, ...restParameters: any[]): any; new (arguments: number, ...restParameters: any[]): any; foo(arguments: number, ...restParameters: any[]): any; prop: (arguments: number, ...restParameters: any) => void; } (arguments: number, ...restParameters); // no error - no code gen >arguments : number @@ -33,7 +33,7 @@ var v2: { >restParameters : any[] } var v21: { ->v21 : { (i: number, ...arguments: any[]): any; new (i: number, ...arguments: any[]): any; foo(i: number, ...arguments: any[]): any; prop: (i: number, ...arguments: any[]) => void; } +>v21 : { (i: number, ...arguments: any[]): any; new (i: number, ...arguments: any[]): any; foo(i: number, ...arguments: any[]): any; prop: (i: number, ...arguments: any) => void; } (i: number, ...arguments); // no error - no code gen >i : number diff --git a/tests/baselines/reference/collisionRestParameterInType.types b/tests/baselines/reference/collisionRestParameterInType.types index 11322dca66026..9095b3a48df43 100644 --- a/tests/baselines/reference/collisionRestParameterInType.types +++ b/tests/baselines/reference/collisionRestParameterInType.types @@ -7,7 +7,7 @@ var v1: (_i: number, ...restParameters) => void; // no error - no code gen >restParameters : any[] var v2: { ->v2 : { (_i: number, ...restParameters: any[]): any; new (_i: number, ...restParameters: any[]): any; foo(_i: number, ...restParameters: any[]): any; prop: (_i: number, ...restParameters: any[]) => void; } +>v2 : { (_i: number, ...restParameters: any[]): any; new (_i: number, ...restParameters: any[]): any; foo(_i: number, ...restParameters: any[]): any; prop: (_i: number, ...restParameters: any) => void; } (_i: number, ...restParameters); // no error - no code gen >_i : number diff --git a/tests/baselines/reference/complexRecursiveCollections.types b/tests/baselines/reference/complexRecursiveCollections.types index b5e393481515e..f9c8f5d01e1b2 100644 --- a/tests/baselines/reference/complexRecursiveCollections.types +++ b/tests/baselines/reference/complexRecursiveCollections.types @@ -425,12 +425,12 @@ declare module Immutable { >value : this merge(...collections: Array | {[key: string]: V}>): this; ->merge : (...collections: (Collection | { [key: string]: V; })[]) => this +>merge : (...collections: Array | { [key: string]: V;}>) => this >collections : (Collection | { [key: string]: V; })[] >key : string mergeWith(merger: (oldVal: V, newVal: V, key: K) => V, ...collections: Array | {[key: string]: V}>): this; ->mergeWith : (merger: (oldVal: V, newVal: V, key: K) => V, ...collections: (Collection | { [key: string]: V; })[]) => this +>mergeWith : (merger: (oldVal: V, newVal: V, key: K) => V, ...collections: Array | { [key: string]: V;}>) => this >merger : (oldVal: V, newVal: V, key: K) => V >oldVal : V >newVal : V @@ -439,12 +439,12 @@ declare module Immutable { >key : string mergeDeep(...collections: Array | {[key: string]: V}>): this; ->mergeDeep : (...collections: (Collection | { [key: string]: V; })[]) => this +>mergeDeep : (...collections: Array | { [key: string]: V;}>) => this >collections : (Collection | { [key: string]: V; })[] >key : string mergeDeepWith(merger: (oldVal: V, newVal: V, key: K) => V, ...collections: Array | {[key: string]: V}>): this; ->mergeDeepWith : (merger: (oldVal: V, newVal: V, key: K) => V, ...collections: (Collection | { [key: string]: V; })[]) => this +>mergeDeepWith : (merger: (oldVal: V, newVal: V, key: K) => V, ...collections: Array | { [key: string]: V;}>) => this >merger : (oldVal: V, newVal: V, key: K) => V >oldVal : V >newVal : V @@ -507,7 +507,7 @@ declare module Immutable { >collections : Iterable<[KC, VC]>[] concat(...collections: Array<{[key: string]: C}>): Map; ->concat : { (...collections: Iterable<[KC, VC]>[]): Map; (...collections: { [key: string]: C; }[]): Map; } +>concat : { (...collections: Iterable<[KC, VC]>[]): Map; (...collections: Array<{ [key: string]: C;}>): Map; } >collections : { [key: string]: C; }[] >key : string @@ -592,7 +592,7 @@ declare module Immutable { >collections : Iterable<[KC, VC]>[] concat(...collections: Array<{[key: string]: C}>): OrderedMap; ->concat : { (...collections: Iterable<[KC, VC]>[]): OrderedMap; (...collections: { [key: string]: C; }[]): OrderedMap; } +>concat : { (...collections: Iterable<[KC, VC]>[]): OrderedMap; (...collections: Array<{ [key: string]: C;}>): OrderedMap; } >collections : { [key: string]: C; }[] >key : string @@ -660,7 +660,7 @@ declare module Immutable { >iter : Collection function fromKeys(obj: {[key: string]: any}): Set; ->fromKeys : { (iter: Collection): Set; (obj: { [key: string]: any; }): Set; } +>fromKeys : { (iter: Collection): Set; (obj: { [key: string]: any;}): Set; } >obj : { [key: string]: any; } >key : string @@ -782,7 +782,7 @@ declare module Immutable { >iter : Collection function fromKeys(obj: {[key: string]: any}): OrderedSet; ->fromKeys : { (iter: Collection): OrderedSet; (obj: { [key: string]: any; }): OrderedSet; } +>fromKeys : { (iter: Collection): OrderedSet; (obj: { [key: string]: any;}): OrderedSet; } >obj : { [key: string]: any; } >key : string } @@ -1104,7 +1104,7 @@ declare module Immutable { // Conversion to JavaScript types toJS(): { [K in keyof T]: any }; ->toJS : () => { [K in keyof T]: any; } +>toJS : () => { [K in keyof T]: any;} toJSON(): T; >toJSON : () => T @@ -1163,7 +1163,7 @@ declare module Immutable { >Seq : any export function Keyed(obj: {[key: string]: V}): Seq.Keyed; ->Keyed : { (collection: Iterable<[K, V_1]>): Keyed; (obj: { [key: string]: V; }): Seq.Keyed; (): Keyed; (): Keyed; } +>Keyed : { (collection: Iterable<[K, V_1]>): Keyed; (obj: { [key: string]: V;}): Seq.Keyed; (): Keyed; (): Keyed; } >obj : { [key: string]: V; } >key : string >Seq : any @@ -1183,7 +1183,7 @@ declare module Immutable { >toJS : () => Object toJSON(): { [key: string]: V }; ->toJSON : () => { [key: string]: V; } +>toJSON : () => { [key: string]: V;} >key : string toSeq(): this; @@ -1195,7 +1195,7 @@ declare module Immutable { >Seq : any concat(...collections: Array<{[key: string]: C}>): Seq.Keyed; ->concat : { (...collections: Iterable<[KC, VC]>[]): Keyed; (...collections: { [key: string]: C; }[]): Seq.Keyed; } +>concat : { (...collections: Iterable<[KC, VC]>[]): Keyed; (...collections: Array<{ [key: string]: C;}>): Seq.Keyed; } >collections : { [key: string]: C; }[] >key : string >Seq : any @@ -1507,7 +1507,7 @@ declare module Immutable { >Collection : any export function Keyed(obj: {[key: string]: V}): Collection.Keyed; ->Keyed : { (collection: Iterable<[K, V_1]>): Keyed; (obj: { [key: string]: V; }): Collection.Keyed; } +>Keyed : { (collection: Iterable<[K, V_1]>): Keyed; (obj: { [key: string]: V;}): Collection.Keyed; } >obj : { [key: string]: V; } >key : string >Collection : any @@ -1517,7 +1517,7 @@ declare module Immutable { >toJS : () => Object toJSON(): { [key: string]: V }; ->toJSON : () => { [key: string]: V; } +>toJSON : () => { [key: string]: V;} >key : string toSeq(): Seq.Keyed; @@ -1534,7 +1534,7 @@ declare module Immutable { >Collection : any concat(...collections: Array<{[key: string]: C}>): Collection.Keyed; ->concat : { (...collections: Iterable<[KC, VC]>[]): Keyed; (...collections: { [key: string]: C; }[]): Collection.Keyed; } +>concat : { (...collections: Iterable<[KC, VC]>[]): Keyed; (...collections: Array<{ [key: string]: C;}>): Collection.Keyed; } >collections : { [key: string]: C; }[] >key : string >Collection : any @@ -1882,18 +1882,18 @@ declare module Immutable { // Conversion to JavaScript types toJS(): Array | { [key: string]: any }; ->toJS : () => any[] | { [key: string]: any; } +>toJS : () => Array | { [key: string]: any;} >key : string toJSON(): Array | { [key: string]: V }; ->toJSON : () => V[] | { [key: string]: V; } +>toJSON : () => Array | { [key: string]: V;} >key : string toArray(): Array; >toArray : () => Array toObject(): { [key: string]: V }; ->toObject : () => { [key: string]: V; } +>toObject : () => { [key: string]: V;} >key : string // Conversion to Collections diff --git a/tests/baselines/reference/complicatedPrivacy.types b/tests/baselines/reference/complicatedPrivacy.types index c43b086d817f3..c8e8e522759a5 100644 --- a/tests/baselines/reference/complicatedPrivacy.types +++ b/tests/baselines/reference/complicatedPrivacy.types @@ -52,7 +52,7 @@ module m1 { } export function f3(): { ->f3 : () => (a: number) => C1 +>f3 : () => { (a: number): C1;} (a: number) : C1; >a : number @@ -74,7 +74,7 @@ module m1 { export function f5(arg2: { ->f5 : (arg2: new (arg1: C1) => C1) => void +>f5 : (arg2: { new (arg1: C1): C1;}) => void >arg2 : new (arg1: C1) => C1 new (arg1: C1) : C1 diff --git a/tests/baselines/reference/computedPropertyNames48_ES5.types b/tests/baselines/reference/computedPropertyNames48_ES5.types index a55489c7bda34..2d34a248f4268 100644 --- a/tests/baselines/reference/computedPropertyNames48_ES5.types +++ b/tests/baselines/reference/computedPropertyNames48_ES5.types @@ -2,7 +2,7 @@ === computedPropertyNames48_ES5.ts === declare function extractIndexer(p: { [n: number]: T }): T; ->extractIndexer : (p: { [n: number]: T; }) => T +>extractIndexer : (p: { [n: number]: T;}) => T >p : { [n: number]: T; } >n : number diff --git a/tests/baselines/reference/computedPropertyNames48_ES6.types b/tests/baselines/reference/computedPropertyNames48_ES6.types index d34121937baff..db27fafd2664f 100644 --- a/tests/baselines/reference/computedPropertyNames48_ES6.types +++ b/tests/baselines/reference/computedPropertyNames48_ES6.types @@ -2,7 +2,7 @@ === computedPropertyNames48_ES6.ts === declare function extractIndexer(p: { [n: number]: T }): T; ->extractIndexer : (p: { [n: number]: T; }) => T +>extractIndexer : (p: { [n: number]: T;}) => T >p : { [n: number]: T; } >n : number diff --git a/tests/baselines/reference/conditionalTypeBasedContextualTypeReturnTypeWidening.types b/tests/baselines/reference/conditionalTypeBasedContextualTypeReturnTypeWidening.types index 67e4c763b30fb..6922ad1d6a5d8 100644 --- a/tests/baselines/reference/conditionalTypeBasedContextualTypeReturnTypeWidening.types +++ b/tests/baselines/reference/conditionalTypeBasedContextualTypeReturnTypeWidening.types @@ -6,7 +6,7 @@ declare function useState1(initialState: (S extends (() => any) ? never : S) >initialState : (S extends () => any ? never : S) | (() => S) declare function useState2(initialState: (S extends ((...args: any[]) => any) ? never : S) | (() => S)): S; // Any args ->useState2 : (initialState: (S extends (...args: any[]) => any ? never : S) | (() => S)) => S +>useState2 : (initialState: (S extends ((...args: any[]) => any) ? never : S) | (() => S)) => S >initialState : (S extends (...args: any[]) => any ? never : S) | (() => S) >args : any[] @@ -31,7 +31,7 @@ declare function useState3(initialState: (T extends (() => any) >initialState : (T extends () => any ? never : T) | (() => S) declare function useState4(initialState: (T extends ((...args: any[]) => any) ? never : T) | (() => S)): S; // Any args ->useState4 : (initialState: (T extends (...args: any[]) => any ? never : T) | (() => S)) => S +>useState4 : (initialState: (T extends ((...args: any[]) => any) ? never : T) | (() => S)) => S >initialState : (T extends (...args: any[]) => any ? never : T) | (() => S) >args : any[] diff --git a/tests/baselines/reference/constraintWithIndexedAccess.types b/tests/baselines/reference/constraintWithIndexedAccess.types index c448e08e22320..e3f595d5095ed 100644 --- a/tests/baselines/reference/constraintWithIndexedAccess.types +++ b/tests/baselines/reference/constraintWithIndexedAccess.types @@ -3,7 +3,7 @@ === constraintWithIndexedAccess.ts === // #52399 type DataFetchFns = { ->DataFetchFns : { Boat: { requiresLicense: (id: string) => boolean; maxGroundSpeed: (id: string) => number; description: (id: string) => string; displacement: (id: string) => number; name: (id: string) => string; }; Plane: { requiresLicense: (id: string) => boolean; maxGroundSpeed: (id: string) => number; maxTakeoffWeight: (id: string) => number; maxCruisingAltitude: (id: string) => number; name: (id: string) => string; }; } +>DataFetchFns : { Boat: { requiresLicense: (id: string) => boolean; maxGroundSpeed: (id: string) => number; description: (id: string) => string; displacement: (id: string) => number; name: (id: string) => string;}; Plane: { requiresLicense: (id: string) => boolean; maxGroundSpeed: (id: string) => number; maxTakeoffWeight: (id: string) => number; maxCruisingAltitude: (id: string) => number; name: (id: string) => string;}; } Boat: { >Boat : { requiresLicense: (id: string) => boolean; maxGroundSpeed: (id: string) => number; description: (id: string) => string; displacement: (id: string) => number; name: (id: string) => string; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types index 2ff0dba4385c1..53d47fecbc1a2 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types @@ -134,7 +134,7 @@ interface A { // T }; a18: { ->a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } +>a18 : { new (x: { new (a: number): number; new (a: string): string;}): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date;}): any[]; } new (x: { >x : { new (a: number): number; new (a: string): string; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.types index e342e13f9b931..a97e1f409ea18 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.types @@ -81,7 +81,7 @@ module Errors { >b : number a16: { ->a16 : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; } +>a16 : { new (x: { new (a: number): number; new (a?: number): number;}): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean;}): boolean[]; } // type of parameter is overload set which means we can't do inference based on this type new (x: { diff --git a/tests/baselines/reference/contextualReturnTypeOfIIFE3.types b/tests/baselines/reference/contextualReturnTypeOfIIFE3.types index 002881a35da44..93ebf51cc6a53 100644 --- a/tests/baselines/reference/contextualReturnTypeOfIIFE3.types +++ b/tests/baselines/reference/contextualReturnTypeOfIIFE3.types @@ -5,7 +5,7 @@ declare namespace app { >app : typeof app var foo: { ->foo : { bar: { someFun: (arg: number) => void; }; } +>foo : { bar: { someFun: (arg: number) => void;}; } bar: { >bar : { someFun: (arg: number) => void; } diff --git a/tests/baselines/reference/contextualSignatureInArrayElementLibEs2015.types b/tests/baselines/reference/contextualSignatureInArrayElementLibEs2015.types index b5a202c16ed61..e159a9aa5b4cd 100644 --- a/tests/baselines/reference/contextualSignatureInArrayElementLibEs2015.types +++ b/tests/baselines/reference/contextualSignatureInArrayElementLibEs2015.types @@ -4,7 +4,7 @@ // See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984 declare function test( ->test : (arg: Record void> | ((arg: number) => void)[]) => void +>test : (arg: Record void> | Array<(arg: number) => void>) => void arg: Record void> | Array<(arg: number) => void> >arg : Record void> | ((arg: number) => void)[] diff --git a/tests/baselines/reference/contextualSignatureInArrayElementLibEs5.types b/tests/baselines/reference/contextualSignatureInArrayElementLibEs5.types index 5b4a4cc65891b..93c92a5ebf257 100644 --- a/tests/baselines/reference/contextualSignatureInArrayElementLibEs5.types +++ b/tests/baselines/reference/contextualSignatureInArrayElementLibEs5.types @@ -4,7 +4,7 @@ // See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984 declare function test( ->test : (arg: Record void> | ((arg: number) => void)[]) => void +>test : (arg: Record void> | Array<(arg: number) => void>) => void arg: Record void> | Array<(arg: number) => void> >arg : Record void> | ((arg: number) => void)[] diff --git a/tests/baselines/reference/contextualTypeOfIndexedAccessParameter.types b/tests/baselines/reference/contextualTypeOfIndexedAccessParameter.types index 49aa2be3ac271..7b6ea19ac5998 100644 --- a/tests/baselines/reference/contextualTypeOfIndexedAccessParameter.types +++ b/tests/baselines/reference/contextualTypeOfIndexedAccessParameter.types @@ -5,7 +5,7 @@ type Keys = "a" | "b"; >Keys : "a" | "b" type OptionsForKey = { a: { cb: (p: number) => number } } & { b: {} }; ->OptionsForKey : { a: { cb: (p: number) => number; }; } & { b: {}; } +>OptionsForKey : { a: { cb: (p: number) => number;}; } & { b: {}; } >a : { cb: (p: number) => number; } >cb : (p: number) => number >p : number diff --git a/tests/baselines/reference/contextualTypeOnYield1.types b/tests/baselines/reference/contextualTypeOnYield1.types index abca3a3176923..422e6dddade25 100644 --- a/tests/baselines/reference/contextualTypeOnYield1.types +++ b/tests/baselines/reference/contextualTypeOnYield1.types @@ -2,7 +2,7 @@ === contextualTypeOnYield1.ts === type FuncOrGeneratorFunc = () => (number | Generator<(arg: number) => void, any, void>) ->FuncOrGeneratorFunc : () => number | Generator<(arg: number) => void, any, void> +>FuncOrGeneratorFunc : () => (number | Generator<(arg: number) => void, any, void>) >arg : number const f: FuncOrGeneratorFunc = function*() { diff --git a/tests/baselines/reference/contextualTypeOnYield2.types b/tests/baselines/reference/contextualTypeOnYield2.types index 0d54bdf7dd790..38c097b4d2d8e 100644 --- a/tests/baselines/reference/contextualTypeOnYield2.types +++ b/tests/baselines/reference/contextualTypeOnYield2.types @@ -2,7 +2,7 @@ === contextualTypeOnYield2.ts === type OrGen = () => (number | Generator void, undefined>); ->OrGen : () => number | Generator void, undefined> +>OrGen : () => (number | Generator void, undefined>) >arg : number const g: OrGen = function* () { diff --git a/tests/baselines/reference/contextualTyping.types b/tests/baselines/reference/contextualTyping.types index 435a3ccce2802..3da7f32f34479 100644 --- a/tests/baselines/reference/contextualTyping.types +++ b/tests/baselines/reference/contextualTyping.types @@ -327,7 +327,7 @@ interface IPlaceHolder { } var objc8: { ->objc8 : { t1: (s: string) => string; t2: IFoo; t3: number[]; t4: () => IFoo; t5: (n: number) => IFoo; t6: (n: number, s: string) => IFoo; t7: (n: number, s: string) => number; t8: (n: number, s: string) => number; t9: number[][]; t10: IFoo[]; t11: ((n: number, s: string) => string)[]; t12: IBar; t13: IFoo; t14: IFoo; } +>objc8 : { t1: (s: string) => string; t2: IFoo; t3: number[]; t4: () => IFoo; t5: (n: number) => IFoo; t6: (n: number, s: string) => IFoo; t7: { (n: number, s: string): number;}; t8: (n: number, s: string) => number; t9: number[][]; t10: IFoo[]; t11: { (n: number, s: string): string;}[]; t12: IBar; t13: IFoo; t14: IFoo; } t1: (s: string) => string; >t1 : (s: string) => string diff --git a/tests/baselines/reference/contextualTyping23.types b/tests/baselines/reference/contextualTyping23.types index 2aa3139ae530e..6909452a3b648 100644 --- a/tests/baselines/reference/contextualTyping23.types +++ b/tests/baselines/reference/contextualTyping23.types @@ -2,7 +2,7 @@ === contextualTyping23.ts === var foo:(a:{():number; (i:number):number; })=>number; foo = function(a){return 5}; ->foo : (a: { (): number; (i: number): number; }) => number +>foo : (a: { (): number; (i: number): number;}) => number >a : { (): number; (i: number): number; } >i : number >foo = function(a){return 5} : (a: { (): number; (i: number): number; }) => number diff --git a/tests/baselines/reference/contextualTyping24.types b/tests/baselines/reference/contextualTyping24.types index 8e4b45d78565a..e00365599babd 100644 --- a/tests/baselines/reference/contextualTyping24.types +++ b/tests/baselines/reference/contextualTyping24.types @@ -2,7 +2,7 @@ === contextualTyping24.ts === var foo:(a:{():number; (i:number):number; })=>number; foo = function(this: void, a:string){return 5}; ->foo : (a: { (): number; (i: number): number; }) => number +>foo : (a: { (): number; (i: number): number;}) => number >a : { (): number; (i: number): number; } >i : number >foo = function(this: void, a:string){return 5} : (this: void, a: string) => number diff --git a/tests/baselines/reference/contextualTyping32.types b/tests/baselines/reference/contextualTyping32.types index 00e0c8821b8cb..666cec7af547d 100644 --- a/tests/baselines/reference/contextualTyping32.types +++ b/tests/baselines/reference/contextualTyping32.types @@ -2,7 +2,7 @@ === contextualTyping32.ts === function foo(param: {():number; (i:number):number; }[]) { }; foo([function(){return 1;}, function(){return 4}]); ->foo : (param: { (): number; (i: number): number; }[]) => void +>foo : (param: { (): number; (i: number): number;}[]) => void >param : { (): number; (i: number): number; }[] >i : number >foo([function(){return 1;}, function(){return 4}]) : void diff --git a/tests/baselines/reference/contextualTyping33.types b/tests/baselines/reference/contextualTyping33.types index e575ca6d232da..c4ca89867a8ef 100644 --- a/tests/baselines/reference/contextualTyping33.types +++ b/tests/baselines/reference/contextualTyping33.types @@ -2,7 +2,7 @@ === contextualTyping33.ts === function foo(param: {():number; (i:number):number; }[]) { }; foo([function(){return 1;}, function(){return "foo"}]); ->foo : (param: { (): number; (i: number): number; }[]) => void +>foo : (param: { (): number; (i: number): number;}[]) => void >param : { (): number; (i: number): number; }[] >i : number >foo([function(){return 1;}, function(){return "foo"}]) : void diff --git a/tests/baselines/reference/contextualTypingOfObjectLiterals.types b/tests/baselines/reference/contextualTypingOfObjectLiterals.types index a27bfba1cc990..732562feed36c 100644 --- a/tests/baselines/reference/contextualTypingOfObjectLiterals.types +++ b/tests/baselines/reference/contextualTypingOfObjectLiterals.types @@ -22,7 +22,7 @@ obj1 = obj2; // Error - indexer doesn't match >obj2 : { x: string; } function f(x: { [s: string]: string }) { } ->f : (x: { [s: string]: string; }) => void +>f : (x: { [s: string]: string;}) => void >x : { [s: string]: string; } >s : string diff --git a/tests/baselines/reference/controlFlowAliasing.types b/tests/baselines/reference/controlFlowAliasing.types index ea5ee6edf01f3..502041f2fedb8 100644 --- a/tests/baselines/reference/controlFlowAliasing.types +++ b/tests/baselines/reference/controlFlowAliasing.types @@ -580,7 +580,7 @@ function f28(obj?: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) // Narrowing by aliased discriminant property access function f30(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) { ->f30 : (obj: { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; }) => void +>f30 : (obj: { kind: 'foo'; foo: string;} | { kind: 'bar'; bar: number;}) => void >obj : { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; } >kind : "foo" >foo : string @@ -612,7 +612,7 @@ function f30(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) { } function f31(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) { ->f31 : (obj: { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; }) => void +>f31 : (obj: { kind: 'foo'; foo: string;} | { kind: 'bar'; bar: number;}) => void >obj : { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; } >kind : "foo" >foo : string @@ -673,7 +673,7 @@ function f32(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) { } function f33(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) { ->f33 : (obj: { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; }) => void +>f33 : (obj: { kind: 'foo'; foo: string;} | { kind: 'bar'; bar: number;}) => void >obj : { kind: 'foo'; foo: string; } | { kind: 'bar'; bar: number; } >kind : "foo" >foo : string @@ -809,7 +809,7 @@ class C11 { // Mixing of aliased discriminants and conditionals function f40(obj: { kind: 'foo', foo?: string } | { kind: 'bar', bar?: number }) { ->f40 : (obj: { kind: 'foo'; foo?: string | undefined; } | { kind: 'bar'; bar?: number | undefined; }) => void +>f40 : (obj: { kind: 'foo'; foo?: string;} | { kind: 'bar'; bar?: number;}) => void >obj : { kind: 'foo'; foo?: string | undefined; } | { kind: 'bar'; bar?: number | undefined; } >kind : "foo" >foo : string | undefined diff --git a/tests/baselines/reference/controlFlowDestructuringVariablesInTryCatch.types b/tests/baselines/reference/controlFlowDestructuringVariablesInTryCatch.types index e8c8848631f79..8198939b7e78b 100644 --- a/tests/baselines/reference/controlFlowDestructuringVariablesInTryCatch.types +++ b/tests/baselines/reference/controlFlowDestructuringVariablesInTryCatch.types @@ -8,7 +8,7 @@ declare function f2(): [b: string]; >f2 : () => [b: string] declare function f3(): { c: string }; ->f3 : () => { c: string; } +>f3 : () => { c: string;} >c : string try { diff --git a/tests/baselines/reference/controlFlowInOperator.types b/tests/baselines/reference/controlFlowInOperator.types index 7ef3c0fbd807e..30cc52d710ee0 100644 --- a/tests/baselines/reference/controlFlowInOperator.types +++ b/tests/baselines/reference/controlFlowInOperator.types @@ -75,7 +75,7 @@ if (d in c) { // repro from https://github.com/microsoft/TypeScript/issues/54790 function uniqueID_54790( ->uniqueID_54790 : (id: string | undefined, seenIDs: { [key: string]: string; }) => string +>uniqueID_54790 : (id: string | undefined, seenIDs: { [key: string]: string;}) => string id: string | undefined, >id : string diff --git a/tests/baselines/reference/controlFlowOptionalChain3.types b/tests/baselines/reference/controlFlowOptionalChain3.types index 5a3ffe3e291e5..94bc8222ab525 100644 --- a/tests/baselines/reference/controlFlowOptionalChain3.types +++ b/tests/baselines/reference/controlFlowOptionalChain3.types @@ -58,7 +58,7 @@ function test2(foo: Foo | undefined) { } function Test3({ foo }: { foo: Foo | undefined }) { ->Test3 : ({ foo }: { foo: Foo | undefined; }) => JSX.Element +>Test3 : ({ foo }: { foo: Foo | undefined;}) => JSX.Element >foo : Foo | undefined >foo : Foo | undefined diff --git a/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types index 08094cb05a401..f52a372b4119c 100644 --- a/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types +++ b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types @@ -6,12 +6,12 @@ function f1(...args) { } >args : any[] function f2(x: (...args) => void) { } ->f2 : (x: (...args: any[]) => void) => void +>f2 : (x: (...args: any) => void) => void >x : (...args: any[]) => void >args : any[] function f3(x: { (...args): void }) { } ->f3 : (x: (...args: any[]) => void) => void +>f3 : (x: { (...args: any): void;}) => void >x : (...args: any[]) => void >args : any[] diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=false).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=false).js new file mode 100644 index 0000000000000..f9190ff777953 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=false).js @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode1.ts] //// + +//// [declarationEmitCastReusesTypeNode1.ts] +type P = { } & { name: string } + +export let vLet = null! as P +export const vConst = null! as P + +export function fn(p = null! as P) {} + +export function fnWithRequiredDefaultParam(p = null! as P, req: number) {} + +export class C { + field = null! as P; + optField? = null! as P; + readonly roFiled = null! as P; + method(p = null! as P) {} + methodWithRequiredDefault(p = null! as P, req: number) {} + + constructor(public ctorField = null! as P) {} + + get x() { return null! as P } + set x(v) { } +} + +export default null! as P; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P = null! as P, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode1.d.ts] +type P = {} & { + name: string; +}; +export declare let vLet: P; +export declare const vConst: P; +export declare function fn(p?: P): void; +export declare function fnWithRequiredDefaultParam(p: P, req: number): void; +export declare class C { + ctorField: P; + field: P; + optField?: P; + readonly roFiled: P; + method(p?: P): void; + methodWithRequiredDefault(p: P, req: number): void; + constructor(ctorField?: P); + get x(): P; + set x(v: P); +} +declare const _default: P; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: P, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=true).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=true).js new file mode 100644 index 0000000000000..f7332974fba4f --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode1(strictnullchecks=true).js @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode1.ts] //// + +//// [declarationEmitCastReusesTypeNode1.ts] +type P = { } & { name: string } + +export let vLet = null! as P +export const vConst = null! as P + +export function fn(p = null! as P) {} + +export function fnWithRequiredDefaultParam(p = null! as P, req: number) {} + +export class C { + field = null! as P; + optField? = null! as P; + readonly roFiled = null! as P; + method(p = null! as P) {} + methodWithRequiredDefault(p = null! as P, req: number) {} + + constructor(public ctorField = null! as P) {} + + get x() { return null! as P } + set x(v) { } +} + +export default null! as P; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P = null! as P, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode1.d.ts] +type P = {} & { + name: string; +}; +export declare let vLet: P; +export declare const vConst: P; +export declare function fn(p?: P): void; +export declare function fnWithRequiredDefaultParam(p: P | undefined, req: number): void; +export declare class C { + ctorField: P; + field: P; + optField?: P; + readonly roFiled: P; + method(p?: P): void; + methodWithRequiredDefault(p: P | undefined, req: number): void; + constructor(ctorField?: P); + get x(): P; + set x(v: P); +} +declare const _default: P; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: P | undefined, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=false).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=false).js new file mode 100644 index 0000000000000..068f1c7f0c072 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=false).js @@ -0,0 +1,79 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode2.ts] //// + +//// [declarationEmitCastReusesTypeNode2.ts] +export let vLet = null! as {} & { name: string } +export const vConst = null! as {} & { name: string } + +export function fn(p = null! as {} & { name: string }) {} + +export function fnWithRequiredDefaultParam(p = null! as {} & { name: string }, req: number) {} + +export class C { + field = null! as {} & { name: string }; + optField? = null! as {} & { name: string }; + readonly roFiled = null! as {} & { name: string }; + method(p = null! as {} & { name: string }) {} + methodWithRequiredDefault(p = null! as {} & { name: string }, req: number) {} + + constructor(public ctorField = null! as {} & { name: string }) {} + + get x() { return null! as {} & { name: string } } + set x(v) { } +} + +export default null! as {} & { name: string } + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: {} & { name: string } = null! as {} & { name: string }, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode2.d.ts] +export declare let vLet: {} & { + name: string; +}; +export declare const vConst: {} & { + name: string; +}; +export declare function fn(p?: {} & { + name: string; +}): void; +export declare function fnWithRequiredDefaultParam(p: {} & { + name: string; +}, req: number): void; +export declare class C { + ctorField: {} & { + name: string; + }; + field: {} & { + name: string; + }; + optField?: {} & { + name: string; + }; + readonly roFiled: {} & { + name: string; + }; + method(p?: {} & { + name: string; + }): void; + methodWithRequiredDefault(p: {} & { + name: string; + }, req: number): void; + constructor(ctorField?: {} & { + name: string; + }); + get x(): {} & { + name: string; + }; + set x(v: {} & { + name: string; + }); +} +declare const _default: {} & { + name: string; +}; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: {} & { + name: string; +}, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=true).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=true).js new file mode 100644 index 0000000000000..9161a318be440 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode2(strictnullchecks=true).js @@ -0,0 +1,79 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode2.ts] //// + +//// [declarationEmitCastReusesTypeNode2.ts] +export let vLet = null! as {} & { name: string } +export const vConst = null! as {} & { name: string } + +export function fn(p = null! as {} & { name: string }) {} + +export function fnWithRequiredDefaultParam(p = null! as {} & { name: string }, req: number) {} + +export class C { + field = null! as {} & { name: string }; + optField? = null! as {} & { name: string }; + readonly roFiled = null! as {} & { name: string }; + method(p = null! as {} & { name: string }) {} + methodWithRequiredDefault(p = null! as {} & { name: string }, req: number) {} + + constructor(public ctorField = null! as {} & { name: string }) {} + + get x() { return null! as {} & { name: string } } + set x(v) { } +} + +export default null! as {} & { name: string } + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: {} & { name: string } = null! as {} & { name: string }, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode2.d.ts] +export declare let vLet: {} & { + name: string; +}; +export declare const vConst: {} & { + name: string; +}; +export declare function fn(p?: {} & { + name: string; +}): void; +export declare function fnWithRequiredDefaultParam(p: ({} & { + name: string; +}) | undefined, req: number): void; +export declare class C { + ctorField: {} & { + name: string; + }; + field: {} & { + name: string; + }; + optField?: {} & { + name: string; + }; + readonly roFiled: {} & { + name: string; + }; + method(p?: {} & { + name: string; + }): void; + methodWithRequiredDefault(p: ({} & { + name: string; + }) | undefined, req: number): void; + constructor(ctorField?: {} & { + name: string; + }); + get x(): {} & { + name: string; + }; + set x(v: {} & { + name: string; + }); +} +declare const _default: {} & { + name: string; +}; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: ({} & { + name: string; +}) | undefined, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=false).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=false).js new file mode 100644 index 0000000000000..d380f7122e6aa --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=false).js @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode3.ts] //// + +//// [declarationEmitCastReusesTypeNode3.ts] +type P = { } & { name: string } + +export let vLet =

null! +export const vConst =

null! + +export function fn(p =

null!) {} + +export function fnWithRequiredDefaultParam(p =

null!, req: number) {} + +export class C { + field =

null! + optField? =

null! + readonly roFiled =

null!; + method(p =

null!) {} + methodWithRequiredDefault(p =

null!, req: number) {} + + constructor(public ctorField =

null!) {} + + get x() { return

null! } + set x(v) { } +} + +export default

null!; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P =

null!, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode3.d.ts] +type P = {} & { + name: string; +}; +export declare let vLet: P; +export declare const vConst: P; +export declare function fn(p?: P): void; +export declare function fnWithRequiredDefaultParam(p: P, req: number): void; +export declare class C { + ctorField: P; + field: P; + optField?: P; + readonly roFiled: P; + method(p?: P): void; + methodWithRequiredDefault(p: P, req: number): void; + constructor(ctorField?: P); + get x(): P; + set x(v: P); +} +declare const _default: P; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: P, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=true).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=true).js new file mode 100644 index 0000000000000..994b37b966fd1 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode3(strictnullchecks=true).js @@ -0,0 +1,54 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode3.ts] //// + +//// [declarationEmitCastReusesTypeNode3.ts] +type P = { } & { name: string } + +export let vLet =

null! +export const vConst =

null! + +export function fn(p =

null!) {} + +export function fnWithRequiredDefaultParam(p =

null!, req: number) {} + +export class C { + field =

null! + optField? =

null! + readonly roFiled =

null!; + method(p =

null!) {} + methodWithRequiredDefault(p =

null!, req: number) {} + + constructor(public ctorField =

null!) {} + + get x() { return

null! } + set x(v) { } +} + +export default

null!; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P =

null!, b: number) {} + + + +//// [declarationEmitCastReusesTypeNode3.d.ts] +type P = {} & { + name: string; +}; +export declare let vLet: P; +export declare const vConst: P; +export declare function fn(p?: P): void; +export declare function fnWithRequiredDefaultParam(p: P | undefined, req: number): void; +export declare class C { + ctorField: P; + field: P; + optField?: P; + readonly roFiled: P; + method(p?: P): void; + methodWithRequiredDefault(p: P | undefined, req: number): void; + constructor(ctorField?: P); + get x(): P; + set x(v: P); +} +declare const _default: P; +export default _default; +export declare function fnWithPartialAnnotationOnDefaultparam(x: P | undefined, b: number): void; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js new file mode 100644 index 0000000000000..129ab98e17b22 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js @@ -0,0 +1,71 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode4.ts] //// + +//// [input.js] +/** + * @typedef {{ } & { name?: string }} P + */ + +const something = /** @type {*} */(null); + +export let vLet = /** @type {P} */(something); +export const vConst = /** @type {P} */(something); + +export function fn(p = /** @type {P} */(something)) {} + +/** @param {number} req */ +export function fnWithRequiredDefaultParam(p = /** @type {P} */(something), req) {} + +export class C { + field = /** @type {P} */(something); + /** @optional */ optField = /** @type {P} */(something); // not a thing + /** @readonly */ roFiled = /** @type {P} */(something); + method(p = /** @type {P} */(something)) {} + /** @param {number} req */ + methodWithRequiredDefault(p = /** @type {P} */(something), req) {} + + constructor(ctorField = /** @type {P} */(something)) {} + + get x() { return /** @type {P} */(something) } + set x(v) { } +} + +export default /** @type {P} */(something); + +// allows `undefined` on the input side, thanks to the initializer +/** + * + * @param {P} x + * @param {number} b + */ +export function fnWithPartialAnnotationOnDefaultparam(x = /** @type {P} */(something), b) {} + + + +//// [input.d.ts] +export function fn(p?: P): void; +/** @param {number} req */ +export function fnWithRequiredDefaultParam(p: P, req: number): void; +/** + * + * @param {P} x + * @param {number} b + */ +export function fnWithPartialAnnotationOnDefaultparam(x: P, b: number): void; +export let vLet: P; +export const vConst: P; +export class C { + constructor(ctorField?: P); + field: P; + /** @optional */ optField: P; + /** @readonly */ readonly roFiled: P; + method(p?: P): void; + /** @param {number} req */ + methodWithRequiredDefault(p: P, req: number): void; + set x(v: P); + get x(): P; +} +declare const _default: P; +export default _default; +export type P = {} & { + name?: string; +}; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js new file mode 100644 index 0000000000000..87d0153c0501b --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js @@ -0,0 +1,71 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode4.ts] //// + +//// [input.js] +/** + * @typedef {{ } & { name?: string }} P + */ + +const something = /** @type {*} */(null); + +export let vLet = /** @type {P} */(something); +export const vConst = /** @type {P} */(something); + +export function fn(p = /** @type {P} */(something)) {} + +/** @param {number} req */ +export function fnWithRequiredDefaultParam(p = /** @type {P} */(something), req) {} + +export class C { + field = /** @type {P} */(something); + /** @optional */ optField = /** @type {P} */(something); // not a thing + /** @readonly */ roFiled = /** @type {P} */(something); + method(p = /** @type {P} */(something)) {} + /** @param {number} req */ + methodWithRequiredDefault(p = /** @type {P} */(something), req) {} + + constructor(ctorField = /** @type {P} */(something)) {} + + get x() { return /** @type {P} */(something) } + set x(v) { } +} + +export default /** @type {P} */(something); + +// allows `undefined` on the input side, thanks to the initializer +/** + * + * @param {P} x + * @param {number} b + */ +export function fnWithPartialAnnotationOnDefaultparam(x = /** @type {P} */(something), b) {} + + + +//// [input.d.ts] +export function fn(p?: P): void; +/** @param {number} req */ +export function fnWithRequiredDefaultParam(p: P | undefined, req: number): void; +/** + * + * @param {P} x + * @param {number} b + */ +export function fnWithPartialAnnotationOnDefaultparam(x: P | undefined, b: number): void; +export let vLet: P; +export const vConst: P; +export class C { + constructor(ctorField?: P); + field: P; + /** @optional */ optField: P; + /** @readonly */ readonly roFiled: P; + method(p?: P): void; + /** @param {number} req */ + methodWithRequiredDefault(p: P | undefined, req: number): void; + set x(v: P); + get x(): P; +} +declare const _default: P; +export default _default; +export type P = {} & { + name?: string; +}; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=false).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=false).js new file mode 100644 index 0000000000000..b3b52b89e083c --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=false).js @@ -0,0 +1,50 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode5.ts] //// + +//// [declarationEmitCastReusesTypeNode5.ts] +export const vNumberLiteral = null! as 1 | 1 +export const vStringLiteral = null! as "1" | "1" +export const vLiteral = null! as "1" | "1" + +type R = { foo: string } + +export class C { + // under !strictNullChecks all types can be reused from the assertion + // under strictNullChecks we need to add undefined, and we can't always know we can + // Can't know if references contain undefined, fall back to inference + tsResolve? = null! as R | R; + tsResolve2? = null! as R | R | string; + // Simple type. we can add undefined + reuseType? = null! as ((p: R) => void) | string | string; + reuseType2? = null! as (new (p: R) => R) | string | string; + reuseType3? = null! as string | number | bigint | symbol | unknown | any | never | symbol; + reuseType4? = null! as [R, R, R] | [R, R, R]; + reuseType5? = null! as R[] | R[]; + reuseType6? = null! as 1 | "2" | 1n | 1n; + reuseType7? = null! as `A` | `A`; + reuseType8? = null! as `${string}-ok` | `${string}-ok`; + reuseType9? = null! as this | this; +} + + + +//// [declarationEmitCastReusesTypeNode5.d.ts] +export declare const vNumberLiteral: 1 | 1; +export declare const vStringLiteral: "1" | "1"; +export declare const vLiteral: "1" | "1"; +type R = { + foo: string; +}; +export declare class C { + tsResolve?: R | R; + tsResolve2?: R | R | string; + reuseType?: ((p: R) => void) | string | string; + reuseType2?: (new (p: R) => R) | string | string; + reuseType3?: string | number | bigint | symbol | unknown | any | never | symbol; + reuseType4?: [R, R, R] | [R, R, R]; + reuseType5?: R[] | R[]; + reuseType6?: 1 | "2" | 1n | 1n; + reuseType7?: `A` | `A`; + reuseType8?: `${string}-ok` | `${string}-ok`; + reuseType9?: this | this; +} +export {}; diff --git a/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=true).js b/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=true).js new file mode 100644 index 0000000000000..b3b52b89e083c --- /dev/null +++ b/tests/baselines/reference/declarationEmitCastReusesTypeNode5(strictnullchecks=true).js @@ -0,0 +1,50 @@ +//// [tests/cases/compiler/declarationEmitCastReusesTypeNode5.ts] //// + +//// [declarationEmitCastReusesTypeNode5.ts] +export const vNumberLiteral = null! as 1 | 1 +export const vStringLiteral = null! as "1" | "1" +export const vLiteral = null! as "1" | "1" + +type R = { foo: string } + +export class C { + // under !strictNullChecks all types can be reused from the assertion + // under strictNullChecks we need to add undefined, and we can't always know we can + // Can't know if references contain undefined, fall back to inference + tsResolve? = null! as R | R; + tsResolve2? = null! as R | R | string; + // Simple type. we can add undefined + reuseType? = null! as ((p: R) => void) | string | string; + reuseType2? = null! as (new (p: R) => R) | string | string; + reuseType3? = null! as string | number | bigint | symbol | unknown | any | never | symbol; + reuseType4? = null! as [R, R, R] | [R, R, R]; + reuseType5? = null! as R[] | R[]; + reuseType6? = null! as 1 | "2" | 1n | 1n; + reuseType7? = null! as `A` | `A`; + reuseType8? = null! as `${string}-ok` | `${string}-ok`; + reuseType9? = null! as this | this; +} + + + +//// [declarationEmitCastReusesTypeNode5.d.ts] +export declare const vNumberLiteral: 1 | 1; +export declare const vStringLiteral: "1" | "1"; +export declare const vLiteral: "1" | "1"; +type R = { + foo: string; +}; +export declare class C { + tsResolve?: R | R; + tsResolve2?: R | R | string; + reuseType?: ((p: R) => void) | string | string; + reuseType2?: (new (p: R) => R) | string | string; + reuseType3?: string | number | bigint | symbol | unknown | any | never | symbol; + reuseType4?: [R, R, R] | [R, R, R]; + reuseType5?: R[] | R[]; + reuseType6?: 1 | "2" | 1n | 1n; + reuseType7?: `A` | `A`; + reuseType8?: `${string}-ok` | `${string}-ok`; + reuseType9?: this | this; +} +export {}; diff --git a/tests/baselines/reference/defaultValueInFunctionTypes.types b/tests/baselines/reference/defaultValueInFunctionTypes.types index 38e4e17edacad..50060f43ed68f 100644 --- a/tests/baselines/reference/defaultValueInFunctionTypes.types +++ b/tests/baselines/reference/defaultValueInFunctionTypes.types @@ -2,7 +2,7 @@ === defaultValueInFunctionTypes.ts === type Foo = ({ first = 0 }: { first?: number }) => unknown; ->Foo : ({ first }: { first?: number; }) => unknown +>Foo : ({ first }: { first?: number;}) => unknown >first : number >0 : 0 >first : number diff --git a/tests/baselines/reference/deferredLookupTypeResolution.types b/tests/baselines/reference/deferredLookupTypeResolution.types index 2d8ef11ae7796..df90e3626548f 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution.types +++ b/tests/baselines/reference/deferredLookupTypeResolution.types @@ -29,7 +29,7 @@ type T2 = ObjectHasKey<{ a: string }, 'b'>; // 'false' // Verify that mapped type isn't eagerly resolved in type-to-string operation declare function f1(a: A, b: B): { [P in A | B]: any }; ->f1 : (a: A, b: B) => { [P in A | B]: any; } +>f1 : (a: A, b: B) => { [P in A | B]: any;} >a : A >b : B diff --git a/tests/baselines/reference/dependentDestructuredVariables.types b/tests/baselines/reference/dependentDestructuredVariables.types index 64b9cb83dc14b..f1a20a753460a 100644 --- a/tests/baselines/reference/dependentDestructuredVariables.types +++ b/tests/baselines/reference/dependentDestructuredVariables.types @@ -749,10 +749,10 @@ reducer("concat", { firstArr: [1, 2], secondArr: [3, 4] }); // repro from https://github.com/microsoft/TypeScript/pull/47190#issuecomment-1057603588 type FooMethod = { ->FooMethod : { method(...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]): void; } +>FooMethod : { method(...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]): void; } method(...args: ->method : (...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]) => void +>method : (...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]) => void >args : [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void] [type: "str", cb: (e: string) => void] | @@ -793,10 +793,10 @@ let fooM: FooMethod = { }; type FooAsyncMethod = { ->FooAsyncMethod : { method(...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]): Promise; } +>FooAsyncMethod : { method(...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]): Promise; } method(...args: ->method : (...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]) => Promise +>method : (...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]) => Promise >args : [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void] [type: "str", cb: (e: string) => void] | @@ -837,10 +837,10 @@ let fooAsyncM: FooAsyncMethod = { }; type FooGenMethod = { ->FooGenMethod : { method(...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]): Generator; } +>FooGenMethod : { method(...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]): Generator; } method(...args: ->method : (...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]) => Generator +>method : (...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]) => Generator >args : [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void] [type: "str", cb: (e: string) => void] | @@ -881,10 +881,10 @@ let fooGenM: FooGenMethod = { }; type FooAsyncGenMethod = { ->FooAsyncGenMethod : { method(...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]): AsyncGenerator; } +>FooAsyncGenMethod : { method(...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]): AsyncGenerator; } method(...args: ->method : (...args: [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void]) => AsyncGenerator +>method : (...args: [ type: "str", cb: (e: string) => void] | [ type: "num", cb: (e: number) => void]) => AsyncGenerator >args : [type: "str", cb: (e: string) => void] | [type: "num", cb: (e: number) => void] [type: "str", cb: (e: string) => void] | diff --git a/tests/baselines/reference/destructuredMaappedTypeIsNotImplicitlyAny.types b/tests/baselines/reference/destructuredMaappedTypeIsNotImplicitlyAny.types index da04f08674beb..f1229421e02d1 100644 --- a/tests/baselines/reference/destructuredMaappedTypeIsNotImplicitlyAny.types +++ b/tests/baselines/reference/destructuredMaappedTypeIsNotImplicitlyAny.types @@ -2,7 +2,7 @@ === destructuredMaappedTypeIsNotImplicitlyAny.ts === function foo(key: T, obj: { [_ in T]: number }) { ->foo : (key: T, obj: { [_ in T]: number; }) => void +>foo : (key: T, obj: { [_ in T]: number;}) => void >key : T >obj : { [_ in T]: number; } diff --git a/tests/baselines/reference/destructuringAssignmentWithDefault.types b/tests/baselines/reference/destructuringAssignmentWithDefault.types index 2475aa92c4267..e53d6c735e332 100644 --- a/tests/baselines/reference/destructuringAssignmentWithDefault.types +++ b/tests/baselines/reference/destructuringAssignmentWithDefault.types @@ -21,7 +21,7 @@ let x = 0; // Repro from #26235 function f1(options?: { color?: string, width?: number }) { ->f1 : (options?: { color?: string | undefined; width?: number | undefined; } | undefined) => void +>f1 : (options?: { color?: string; width?: number;}) => void >options : { color?: string | undefined; width?: number | undefined; } | undefined >color : string | undefined >width : number | undefined @@ -93,7 +93,7 @@ function f2(options?: [string?, number?]) { } function f3(options?: { color: string, width: number }) { ->f3 : (options?: { color: string; width: number; } | undefined) => void +>f3 : (options?: { color: string; width: number;}) => void >options : { color: string; width: number; } | undefined >color : string >width : number diff --git a/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=false).types b/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=false).types index 8557468ab571e..f16f9997e9df7 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=false).types +++ b/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=false).types @@ -27,7 +27,7 @@ interface ExecutionContext { } type CoercedVariableValues = ->CoercedVariableValues : { errors: ReadonlyArray; coerced?: undefined; } | { coerced: { [variable: string]: unknown; }; errors?: undefined; } +>CoercedVariableValues : { errors: ReadonlyArray; coerced?: undefined; } | { coerced: { [variable: string]: unknown;}; errors?: undefined; } | { errors: ReadonlyArray; coerced?: never } >errors : readonly GraphQLError[] @@ -39,7 +39,7 @@ type CoercedVariableValues = >errors : undefined declare function getVariableValues(inputs: { ->getVariableValues : (inputs: { readonly [variable: string]: unknown; }) => CoercedVariableValues +>getVariableValues : (inputs: { readonly [variable: string]: unknown;}) => CoercedVariableValues >inputs : { readonly [variable: string]: unknown; } readonly [variable: string]: unknown; diff --git a/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=true).types b/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=true).types index cb2203fa0ad1d..d81d2d67fc27c 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=true).types +++ b/tests/baselines/reference/discriminateWithOptionalProperty3(exactoptionalpropertytypes=true).types @@ -27,7 +27,7 @@ interface ExecutionContext { } type CoercedVariableValues = ->CoercedVariableValues : { errors: ReadonlyArray; coerced?: never; } | { coerced: { [variable: string]: unknown; }; errors?: never; } +>CoercedVariableValues : { errors: ReadonlyArray; coerced?: never; } | { coerced: { [variable: string]: unknown;}; errors?: never; } | { errors: ReadonlyArray; coerced?: never } >errors : readonly GraphQLError[] @@ -39,7 +39,7 @@ type CoercedVariableValues = >errors : undefined declare function getVariableValues(inputs: { ->getVariableValues : (inputs: { readonly [variable: string]: unknown; }) => CoercedVariableValues +>getVariableValues : (inputs: { readonly [variable: string]: unknown;}) => CoercedVariableValues >inputs : { readonly [variable: string]: unknown; } readonly [variable: string]: unknown; diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty_computedNameNegative1.types b/tests/baselines/reference/duplicateObjectLiteralProperty_computedNameNegative1.types index dcb52f928ee05..4a8627ca3562b 100644 --- a/tests/baselines/reference/duplicateObjectLiteralProperty_computedNameNegative1.types +++ b/tests/baselines/reference/duplicateObjectLiteralProperty_computedNameNegative1.types @@ -4,7 +4,7 @@ // repro from https://github.com/microsoft/TypeScript/issues/56341 function bar(props: { x?: string; y?: string }) { ->bar : (props: { x?: string | undefined; y?: string | undefined; }) => { [x: string]: number; } +>bar : (props: { x?: string; y?: string;}) => { [x: string]: number; } >props : { x?: string | undefined; y?: string | undefined; } >x : string | undefined >y : string | undefined diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js index 25e924943d740..d30c21323c469 100644 --- a/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js @@ -10,4 +10,5 @@ var x = {}; //// [duplicatePropertiesInTypeAssertions01.d.ts] declare let x: { a: number; + a: number; }; diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js index 8548522a8ae8a..b0c622dd240e0 100644 --- a/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js @@ -10,4 +10,5 @@ var x = {}; //// [duplicatePropertiesInTypeAssertions02.d.ts] declare let x: { a: number; + a: number; }; diff --git a/tests/baselines/reference/duplicateTypeParameters3.types b/tests/baselines/reference/duplicateTypeParameters3.types index 86130359e6e58..1236a380eb452 100644 --- a/tests/baselines/reference/duplicateTypeParameters3.types +++ b/tests/baselines/reference/duplicateTypeParameters3.types @@ -3,7 +3,7 @@ === duplicateTypeParameters3.ts === interface X { x: () => () => void; ->x : () => () => void +>x : () => () => void } diff --git a/tests/baselines/reference/emitRestParametersFunctionProperty.types b/tests/baselines/reference/emitRestParametersFunctionProperty.types index b0a048771c982..14396eab0a203 100644 --- a/tests/baselines/reference/emitRestParametersFunctionProperty.types +++ b/tests/baselines/reference/emitRestParametersFunctionProperty.types @@ -2,7 +2,7 @@ === emitRestParametersFunctionProperty.ts === var obj: { ->obj : { func1: (...rest: any[]) => void; } +>obj : { func1: (...rest: any) => void; } func1: (...rest) => void >func1 : (...rest: any[]) => void diff --git a/tests/baselines/reference/emitRestParametersFunctionPropertyES6.types b/tests/baselines/reference/emitRestParametersFunctionPropertyES6.types index 16d508a5043ba..d2ddf645da013 100644 --- a/tests/baselines/reference/emitRestParametersFunctionPropertyES6.types +++ b/tests/baselines/reference/emitRestParametersFunctionPropertyES6.types @@ -2,7 +2,7 @@ === emitRestParametersFunctionPropertyES6.ts === var obj: { ->obj : { func1: (...rest: any[]) => void; } +>obj : { func1: (...rest: any) => void; } func1: (...rest) => void >func1 : (...rest: any[]) => void diff --git a/tests/baselines/reference/esDecorators-contextualTypes.2.types b/tests/baselines/reference/esDecorators-contextualTypes.2.types index e0e2caf638f53..fc2b84e73b140 100644 --- a/tests/baselines/reference/esDecorators-contextualTypes.2.types +++ b/tests/baselines/reference/esDecorators-contextualTypes.2.types @@ -35,14 +35,14 @@ export { C }; >C : typeof C function boundMethodLogger(source: string, bound = true) { ->boundMethodLogger : (source: string, bound?: boolean) => (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => (this: This, ...args: Args) => Return +>boundMethodLogger : (source: string, bound?: boolean) => (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => ((this: This, ...args: Args) => Return) >source : string >bound : boolean >true : true return function loggedDecorator( ->function loggedDecorator( target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return> ): ((this: This, ...args: Args) => Return) { if (bound) { context.addInitializer(function () { (this as any)[context.name] = (this as any)[context.name].bind(this); }); } return function (this, ...args) { console.log(`<${source}>: I'm logging stuff from ${context.name.toString()}!`); return target.apply(this, args); } } : (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => (this: This, ...args: Args) => Return ->loggedDecorator : (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => (this: This, ...args: Args) => Return +>function loggedDecorator( target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return> ): ((this: This, ...args: Args) => Return) { if (bound) { context.addInitializer(function () { (this as any)[context.name] = (this as any)[context.name].bind(this); }); } return function (this, ...args) { console.log(`<${source}>: I'm logging stuff from ${context.name.toString()}!`); return target.apply(this, args); } } : (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => ((this: This, ...args: Args) => Return) +>loggedDecorator : (target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext Return>) => ((this: This, ...args: Args) => Return) target: (this: This, ...args: Args) => Return, >target : (this: This, ...args: Args) => Return diff --git a/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types b/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types index e1c63b94db34a..f01353028c5c0 100644 --- a/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types +++ b/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types @@ -3,8 +3,8 @@ === esNextWeakRefs_IterableWeakMap.ts === /** `static #cleanup` */ const IterableWeakMap_cleanup = ({ ref, set }: { ->IterableWeakMap_cleanup : ({ ref, set }: { readonly ref: WeakRef; readonly set: Set>; }) => void ->({ ref, set }: { readonly ref: WeakRef; readonly set: Set>;}) => { set.delete(ref);} : ({ ref, set }: { readonly ref: WeakRef; readonly set: Set>; }) => void +>IterableWeakMap_cleanup : ({ ref, set }: { readonly ref: WeakRef; readonly set: Set>;}) => void +>({ ref, set }: { readonly ref: WeakRef; readonly set: Set>;}) => { set.delete(ref);} : ({ ref, set }: { readonly ref: WeakRef; readonly set: Set>;}) => void >ref : WeakRef >set : Set> diff --git a/tests/baselines/reference/excessPropertyCheckingIntersectionWithConditional.types b/tests/baselines/reference/excessPropertyCheckingIntersectionWithConditional.types index 5e2a24c01df20..22810225c66d3 100644 --- a/tests/baselines/reference/excessPropertyCheckingIntersectionWithConditional.types +++ b/tests/baselines/reference/excessPropertyCheckingIntersectionWithConditional.types @@ -6,8 +6,8 @@ type Foo = K extends unknown ? { a: number } : unknown >a : number const createDefaultExample = (x: K): Foo & { x: K; } => { ->createDefaultExample : (x: K) => Foo & { x: K; } ->(x: K): Foo & { x: K; } => { return { a: 1, x: x }; // okay in TS 4.7.4, error in TS 4.8.2} : (x: K) => Foo & { x: K; } +>createDefaultExample : (x: K) => Foo & { x: K;} +>(x: K): Foo & { x: K; } => { return { a: 1, x: x }; // okay in TS 4.7.4, error in TS 4.8.2} : (x: K) => Foo & { x: K;} >x : K >x : K diff --git a/tests/baselines/reference/forInStrictNullChecksNoError.types b/tests/baselines/reference/forInStrictNullChecksNoError.types index 24d5586144add..3baf3da546d91 100644 --- a/tests/baselines/reference/forInStrictNullChecksNoError.types +++ b/tests/baselines/reference/forInStrictNullChecksNoError.types @@ -2,7 +2,7 @@ === forInStrictNullChecksNoError.ts === function f(x: { [key: string]: number; } | null | undefined) { ->f : (x: { [key: string]: number; } | null | undefined) => void +>f : (x: { [key: string]: number;} | null | undefined) => void >x : { [key: string]: number; } | null | undefined >key : string diff --git a/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types index 0fcad4f3b53d4..e3f79afbfd0ee 100644 --- a/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types +++ b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types @@ -2,7 +2,7 @@ === functionDeclarationWithArgumentOfTypeFunctionTypeArray.ts === function foo(args: { (x): number }[]) { ->foo : (args: ((x: any) => number)[]) => number +>foo : (args: { (x: any): number;}[]) => number >args : ((x: any) => number)[] >x : any diff --git a/tests/baselines/reference/functionLiterals.types b/tests/baselines/reference/functionLiterals.types index 17f64c39de6c8..29a49ab24fc6e 100644 --- a/tests/baselines/reference/functionLiterals.types +++ b/tests/baselines/reference/functionLiterals.types @@ -4,7 +4,7 @@ // PropName(ParamList):ReturnType is equivalent to PropName: { (ParamList): ReturnType } var b: { ->b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>b : { func1(x: number): number; func2: (x: number) => number; func3: { (x: number): number;}; } func1(x: number): number; // Method signature >func1 : (x: number) => number @@ -75,7 +75,7 @@ b.func3 = b.func2; >func2 : (x: number) => number var c: { ->c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string;}; } func4(x: number): number; >func4 : { (x: number): number; (s: string): string; } diff --git a/tests/baselines/reference/generatedContextualTyping.types b/tests/baselines/reference/generatedContextualTyping.types index 277a197f2828c..94213048e6ca5 100644 --- a/tests/baselines/reference/generatedContextualTyping.types +++ b/tests/baselines/reference/generatedContextualTyping.types @@ -1098,7 +1098,7 @@ function x128(parm: Array = [d1, d2]) { } >d2 : Derived2 function x129(parm: { [n: number]: Base; } = [d1, d2]) { } ->x129 : (parm?: { [n: number]: Base; }) => void +>x129 : (parm?: { [n: number]: Base;}) => void >parm : { [n: number]: Base; } >n : number >[d1, d2] : (Derived1 | Derived2)[] @@ -1191,7 +1191,7 @@ function x140(): Array { return [d1, d2]; } >d2 : Derived2 function x141(): { [n: number]: Base; } { return [d1, d2]; } ->x141 : () => { [n: number]: Base; } +>x141 : () => { [n: number]: Base;} >n : number >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 @@ -1312,7 +1312,7 @@ function x152(): Array { return [d1, d2]; return [d1, d2]; } >d2 : Derived2 function x153(): { [n: number]: Base; } { return [d1, d2]; return [d1, d2]; } ->x153 : () => { [n: number]: Base; } +>x153 : () => { [n: number]: Base;} >n : number >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 @@ -1427,7 +1427,7 @@ var x164: () => Array = () => { return [d1, d2]; }; >d2 : Derived2 var x165: () => { [n: number]: Base; } = () => { return [d1, d2]; }; ->x165 : () => { [n: number]: Base; } +>x165 : () => { [n: number]: Base;} >n : number >() => { return [d1, d2]; } : () => (Derived1 | Derived2)[] >[d1, d2] : (Derived1 | Derived2)[] @@ -1528,7 +1528,7 @@ var x176: () => Array = function() { return [d1, d2]; }; >d2 : Derived2 var x177: () => { [n: number]: Base; } = function() { return [d1, d2]; }; ->x177 : () => { [n: number]: Base; } +>x177 : () => { [n: number]: Base;} >n : number >function() { return [d1, d2]; } : () => (Derived1 | Derived2)[] >[d1, d2] : (Derived1 | Derived2)[] @@ -2127,7 +2127,7 @@ var x244: { n: Array; } = { n: [d1, d2] }; >d2 : Derived2 var x245: { n: { [n: number]: Base; }; } = { n: [d1, d2] }; ->x245 : { n: { [n: number]: Base; }; } +>x245 : { n: { [n: number]: Base;}; } >n : { [n: number]: Base; } >n : number >{ n: [d1, d2] } : { n: (Derived1 | Derived2)[]; } @@ -2979,7 +2979,7 @@ function x328(n: Array) { }; x328([d1, d2]); >d2 : Derived2 function x329(n: { [n: number]: Base; }) { }; x329([d1, d2]); ->x329 : (n: { [n: number]: Base; }) => void +>x329 : (n: { [n: number]: Base;}) => void >n : { [n: number]: Base; } >n : number >x329([d1, d2]) : void @@ -3120,8 +3120,8 @@ var x340 = (n: Array) => n; x340([d1, d2]); >d2 : Derived2 var x341 = (n: { [n: number]: Base; }) => n; x341([d1, d2]); ->x341 : (n: { [n: number]: Base; }) => { [n: number]: Base; } ->(n: { [n: number]: Base; }) => n : (n: { [n: number]: Base; }) => { [n: number]: Base; } +>x341 : (n: { [n: number]: Base;}) => { [n: number]: Base; } +>(n: { [n: number]: Base; }) => n : (n: { [n: number]: Base;}) => { [n: number]: Base; } >n : { [n: number]: Base; } >n : number >n : { [n: number]: Base; } @@ -3132,8 +3132,8 @@ var x341 = (n: { [n: number]: Base; }) => n; x341([d1, d2]); >d2 : Derived2 var x342 = (n: {n: Base[]; } ) => n; x342({ n: [d1, d2] }); ->x342 : (n: { n: Base[]; }) => { n: Base[]; } ->(n: {n: Base[]; } ) => n : (n: { n: Base[]; }) => { n: Base[]; } +>x342 : (n: { n: Base[];}) => { n: Base[]; } +>(n: {n: Base[]; } ) => n : (n: { n: Base[];}) => { n: Base[]; } >n : { n: Base[]; } >n : Base[] >n : { n: Base[]; } @@ -3261,8 +3261,8 @@ var x352 = function(n: Array) { }; x352([d1, d2]); >d2 : Derived2 var x353 = function(n: { [n: number]: Base; }) { }; x353([d1, d2]); ->x353 : (n: { [n: number]: Base; }) => void ->function(n: { [n: number]: Base; }) { } : (n: { [n: number]: Base; }) => void +>x353 : (n: { [n: number]: Base;}) => void +>function(n: { [n: number]: Base; }) { } : (n: { [n: number]: Base;}) => void >n : { [n: number]: Base; } >n : number >x353([d1, d2]) : void @@ -3272,8 +3272,8 @@ var x353 = function(n: { [n: number]: Base; }) { }; x353([d1, d2]); >d2 : Derived2 var x354 = function(n: {n: Base[]; } ) { }; x354({ n: [d1, d2] }); ->x354 : (n: { n: Base[]; }) => void ->function(n: {n: Base[]; } ) { } : (n: { n: Base[]; }) => void +>x354 : (n: { n: Base[];}) => void +>function(n: {n: Base[]; } ) { } : (n: { n: Base[];}) => void >n : { n: Base[]; } >n : Base[] >x354({ n: [d1, d2] }) : void diff --git a/tests/baselines/reference/generatorTypeCheck29.types b/tests/baselines/reference/generatorTypeCheck29.types index c6c64c184a90b..3679c7afad03d 100644 --- a/tests/baselines/reference/generatorTypeCheck29.types +++ b/tests/baselines/reference/generatorTypeCheck29.types @@ -2,7 +2,7 @@ === generatorTypeCheck29.ts === function* g2(): Iterator number>> { ->g2 : () => Iterator number>, any, undefined> +>g2 : () => Iterator number>> >x : string yield function* () { diff --git a/tests/baselines/reference/generatorTypeCheck30.types b/tests/baselines/reference/generatorTypeCheck30.types index a4259dfaefafa..e522c7cbb8a6c 100644 --- a/tests/baselines/reference/generatorTypeCheck30.types +++ b/tests/baselines/reference/generatorTypeCheck30.types @@ -2,7 +2,7 @@ === generatorTypeCheck30.ts === function* g2(): Iterator number>> { ->g2 : () => Iterator number>, any, undefined> +>g2 : () => Iterator number>> >x : string yield function* () { diff --git a/tests/baselines/reference/generatorTypeCheck31.types b/tests/baselines/reference/generatorTypeCheck31.types index f25afe8ec55dd..50b48fa47bee5 100644 --- a/tests/baselines/reference/generatorTypeCheck31.types +++ b/tests/baselines/reference/generatorTypeCheck31.types @@ -2,7 +2,7 @@ === generatorTypeCheck31.ts === function* g2(): Iterator<() => Iterable<(x: string) => number>> { ->g2 : () => Iterator<() => Iterable<(x: string) => number>, any, undefined> +>g2 : () => Iterator<() => Iterable<(x: string) => number>> >x : string yield function* () { diff --git a/tests/baselines/reference/generatorTypeCheck45.types b/tests/baselines/reference/generatorTypeCheck45.types index e85d46a50e152..646d73827b320 100644 --- a/tests/baselines/reference/generatorTypeCheck45.types +++ b/tests/baselines/reference/generatorTypeCheck45.types @@ -2,9 +2,9 @@ === generatorTypeCheck45.ts === declare function foo(x: T, fun: () => Iterator<(x: T) => U>, fun2: (y: U) => T): T; ->foo : (x: T, fun: () => Iterator<(x: T) => U, any, undefined>, fun2: (y: U) => T) => T +>foo : (x: T, fun: () => Iterator<(x: T) => U>, fun2: (y: U) => T) => T >x : T ->fun : () => Iterator<(x: T) => U, any, undefined> +>fun : () => Iterator<(x: T) => U> >x : T >fun2 : (y: U) => T >y : U diff --git a/tests/baselines/reference/genericCallWithConstructorTypedArguments5.types b/tests/baselines/reference/genericCallWithConstructorTypedArguments5.types index 47bff51439e16..e6d18ddadbe67 100644 --- a/tests/baselines/reference/genericCallWithConstructorTypedArguments5.types +++ b/tests/baselines/reference/genericCallWithConstructorTypedArguments5.types @@ -4,7 +4,7 @@ // Generic call with parameter of object type with member of function type of n args passed object whose associated member is call signature with n+1 args function foo(arg: { cb: new(t: T) => U }) { ->foo : (arg: { cb: new (t: T) => U; }) => U +>foo : (arg: { cb: new (t: T) => U;}) => U >arg : { cb: new (t: T) => U; } >cb : new (t: T) => U >t : T @@ -53,7 +53,7 @@ var r3 = foo(arg3); // error >arg3 : { cb: new (x: string, y: number) => string; } function foo2(arg: { cb: new(t: T, t2: T) => U }) { ->foo2 : (arg: { cb: new (t: T, t2: T) => U; }) => U +>foo2 : (arg: { cb: new (t: T, t2: T) => U;}) => U >arg : { cb: new (t: T, t2: T) => U; } >cb : new (t: T, t2: T) => U >t : T diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments5.types b/tests/baselines/reference/genericCallWithFunctionTypedArguments5.types index aa75032d49894..a2a0146cc95f7 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments5.types +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments5.types @@ -4,7 +4,7 @@ // Generic call with parameter of object type with member of function type of n args passed object whose associated member is call signature with n+1 args function foo(arg: { cb: (t: T) => U }) { ->foo : (arg: { cb: (t: T) => U; }) => U +>foo : (arg: { cb: (t: T) => U;}) => U >arg : { cb: (t: T) => U; } >cb : (t: T) => U >t : T @@ -54,7 +54,7 @@ var r3 = foo({ cb: (x: string, y: number) => '' }); // error >'' : "" function foo2(arg: { cb: (t: T, t2: T) => U }) { ->foo2 : (arg: { cb: (t: T, t2: T) => U; }) => U +>foo2 : (arg: { cb: (t: T, t2: T) => U;}) => U >arg : { cb: (t: T, t2: T) => U; } >cb : (t: T, t2: T) => U >t : T diff --git a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types index 94df87dabc2eb..d45d0d8172ed4 100644 --- a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types +++ b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types @@ -48,7 +48,7 @@ module GenericParameter { >GenericParameter : typeof GenericParameter function foo5(cb: { new(x: T): string; new(x: number): T }) { ->foo5 : (cb: { new (x: T): string; new (x: number): T; }) => { new (x: T): string; new (x: number): T; } +>foo5 : (cb: { new (x: T): string; new (x: number): T;}) => { new (x: T): string; new (x: number): T; } >cb : { new (x: T): string; new (x: number): T; } >x : T >x : number @@ -84,7 +84,7 @@ module GenericParameter { >b : { new (x: T): string; new (x: number): T_1; } function foo6(cb: { new(x: T): string; new(x: T, y?: T): string }) { ->foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string;}) => { new (x: T): string; new (x: T, y?: T): string; } >cb : { new (x: T): string; new (x: T, y?: T): string; } >x : T >x : T @@ -107,7 +107,7 @@ module GenericParameter { >b : { new (x: T): string; new (x: number): T_1; } function foo7(x:T, cb: { new(x: T): string; new(x: T, y?: T): string }) { ->foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string;}) => { new (x: T): string; new (x: T, y?: T): string; } >x : T >cb : { new (x: T): string; new (x: T, y?: T): string; } >x : T diff --git a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.types b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.types index 791ce86fc9574..b59731ed5482b 100644 --- a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.types +++ b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.types @@ -41,7 +41,7 @@ module GenericParameter { >GenericParameter : typeof GenericParameter function foo5(cb: { new(x: T): string; new(x: number): T }) { ->foo5 : (cb: { new (x: T): string; new (x: number): T; }) => { new (x: T): string; new (x: number): T; } +>foo5 : (cb: { new (x: T): string; new (x: number): T;}) => { new (x: T): string; new (x: number): T; } >cb : { new (x: T): string; new (x: number): T; } >x : T >x : number @@ -61,7 +61,7 @@ module GenericParameter { >a : new (x: T) => T function foo6(cb: { new(x: T): string; new(x: T, y?: T): string }) { ->foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string;}) => { new (x: T): string; new (x: T, y?: T): string; } >cb : { new (x: T): string; new (x: T, y?: T): string; } >x : T >x : T @@ -83,7 +83,7 @@ module GenericParameter { >b : new (x: T, y: T) => string function foo7(x:T, cb: { new(x: T): string; new(x: T, y?: T): string }) { ->foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string;}) => { new (x: T): string; new (x: T, y?: T): string; } >x : T >cb : { new (x: T): string; new (x: T, y?: T): string; } >x : T diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types index bb7832a8e3a99..8c9fe30bd83e3 100644 --- a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types @@ -53,7 +53,7 @@ module GenericParameter { >GenericParameter : typeof GenericParameter function foo5(cb: { (x: T): string; (x: number): T }) { ->foo5 : (cb: { (x: T): string; (x: number): T; }) => { (x: T): string; (x: number): T; } +>foo5 : (cb: { (x: T): string; (x: number): T;}) => { (x: T): string; (x: number): T; } >cb : { (x: T): string; (x: number): T; } >x : T >x : number @@ -82,7 +82,7 @@ module GenericParameter { >a : { (x: T): string; (x: number): T_1; } function foo6(cb: { (x: T): string; (x: T, y?: T): string }) { ->foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string;}) => { (x: T): string; (x: T, y?: T): string; } >cb : { (x: T): string; (x: T, y?: T): string; } >x : T >x : T @@ -118,7 +118,7 @@ module GenericParameter { >'' : "" function foo7(x:T, cb: { (x: T): string; (x: T, y?: T): string }) { ->foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string;}) => { (x: T): string; (x: T, y?: T): string; } >x : T >cb : { (x: T): string; (x: T, y?: T): string; } >x : T diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.types b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.types index af5874bcd73b5..7d894ea158fd6 100644 --- a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.types +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.types @@ -40,7 +40,7 @@ module GenericParameter { >GenericParameter : typeof GenericParameter function foo5(cb: { (x: T): string; (x: number): T }) { ->foo5 : (cb: { (x: T): string; (x: number): T; }) => { (x: T): string; (x: number): T; } +>foo5 : (cb: { (x: T): string; (x: number): T;}) => { (x: T): string; (x: number): T; } >cb : { (x: T): string; (x: number): T; } >x : T >x : number @@ -58,7 +58,7 @@ module GenericParameter { >x : T function foo6(cb: { (x: T): string; (x: T, y?: T): string }) { ->foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string;}) => { (x: T): string; (x: T, y?: T): string; } >cb : { (x: T): string; (x: T, y?: T): string; } >x : T >x : T @@ -78,7 +78,7 @@ module GenericParameter { >'' : "" function foo7(x:T, cb: { (x: T): string; (x: T, y?: T): string }) { ->foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string;}) => { (x: T): string; (x: T, y?: T): string; } >x : T >cb : { (x: T): string; (x: T, y?: T): string; } >x : T diff --git a/tests/baselines/reference/genericFunctionInference1.types b/tests/baselines/reference/genericFunctionInference1.types index e9fa401c34831..558114547b464 100644 --- a/tests/baselines/reference/genericFunctionInference1.types +++ b/tests/baselines/reference/genericFunctionInference1.types @@ -418,7 +418,7 @@ const f41 = pipe4([box, list]); >list : (a: T) => T[] declare function pipe5(f: (a: A) => B): { f: (a: A) => B }; ->pipe5 : (f: (a: A) => B) => { f: (a: A) => B; } +>pipe5 : (f: (a: A) => B) => { f: (a: A) => B;} >f : (a: A) => B >a : A >f : (a: A) => B diff --git a/tests/baselines/reference/genericInterfaceTypeCall.types b/tests/baselines/reference/genericInterfaceTypeCall.types index aea27faa0a15d..0d7c655bb6fb7 100644 --- a/tests/baselines/reference/genericInterfaceTypeCall.types +++ b/tests/baselines/reference/genericInterfaceTypeCall.types @@ -16,7 +16,7 @@ interface bar { >arg : T fail2(func2: { (arg: T): void; }): void; ->fail2 : (func2: (arg: T) => void) => void +>fail2 : (func2: { (arg: T): void;}) => void >func2 : (arg: T) => void >arg : T } diff --git a/tests/baselines/reference/getParameterNameAtPosition.types b/tests/baselines/reference/getParameterNameAtPosition.types index f86cc68820d1f..917f60f2bb723 100644 --- a/tests/baselines/reference/getParameterNameAtPosition.types +++ b/tests/baselines/reference/getParameterNameAtPosition.types @@ -18,7 +18,7 @@ declare function cases(tester: Tester): void; >tester : Tester declare function fn(implementation?: (...args: Y) => any): Mock; ->fn : (implementation?: ((...args: Y) => any) | undefined) => Mock +>fn : (implementation?: (...args: Y) => any) => Mock >implementation : ((...args: Y) => any) | undefined >args : Y diff --git a/tests/baselines/reference/identityAndDivergentNormalizedTypes.types b/tests/baselines/reference/identityAndDivergentNormalizedTypes.types index 5c86e8d8f594a..ae62486c370fe 100644 --- a/tests/baselines/reference/identityAndDivergentNormalizedTypes.types +++ b/tests/baselines/reference/identityAndDivergentNormalizedTypes.types @@ -30,8 +30,8 @@ type PostBody = Extract["body"]; >path : PATH const post = ( ->post : (path: PATH, { body, ...options }: Omit & { body: PostBody; }) => void ->( path: PATH, {body, ...options}: Omit & {body: PostBody}) => {} : (path: PATH, { body, ...options }: Omit & { body: PostBody; }) => void +>post : (path: PATH, { body, ...options }: Omit & { body: PostBody;}) => void +>( path: PATH, {body, ...options}: Omit & {body: PostBody}) => {} : (path: PATH, { body, ...options }: Omit & { body: PostBody;}) => void path: PATH, >path : PATH diff --git a/tests/baselines/reference/implicitIndexSignatures.types b/tests/baselines/reference/implicitIndexSignatures.types index f0a157ae69c76..52e94ad84278b 100644 --- a/tests/baselines/reference/implicitIndexSignatures.types +++ b/tests/baselines/reference/implicitIndexSignatures.types @@ -58,12 +58,12 @@ map = names2; >names2 : { a: string; b: string; } declare function getStringIndexValue(map: { [x: string]: T }): T; ->getStringIndexValue : (map: { [x: string]: T; }) => T +>getStringIndexValue : (map: { [x: string]: T;}) => T >map : { [x: string]: T; } >x : string declare function getNumberIndexValue(map: { [x: number]: T }): T; ->getNumberIndexValue : (map: { [x: number]: T; }) => T +>getNumberIndexValue : (map: { [x: number]: T;}) => T >map : { [x: number]: T; } >x : number diff --git a/tests/baselines/reference/indexSignatureAndMappedType.types b/tests/baselines/reference/indexSignatureAndMappedType.types index 68995d70c54d5..6532f35075005 100644 --- a/tests/baselines/reference/indexSignatureAndMappedType.types +++ b/tests/baselines/reference/indexSignatureAndMappedType.types @@ -5,7 +5,7 @@ // { [key: string]: Y } if X is related to Y. function f1(x: { [key: string]: T }, y: Record) { ->f1 : (x: { [key: string]: T; }, y: Record) => void +>f1 : (x: { [key: string]: T;}, y: Record) => void >x : { [key: string]: T; } >key : string >y : Record @@ -22,7 +22,7 @@ function f1(x: { [key: string]: T }, y: Record) { } function f2(x: { [key: string]: T }, y: Record) { ->f2 : (x: { [key: string]: T; }, y: Record) => void +>f2 : (x: { [key: string]: T;}, y: Record) => void >x : { [key: string]: T; } >key : string >y : Record @@ -39,7 +39,7 @@ function f2(x: { [key: string]: T }, y: Record) { } function f3(x: { [key: string]: T }, y: Record) { ->f3 : (x: { [key: string]: T; }, y: Record) => void +>f3 : (x: { [key: string]: T;}, y: Record) => void >x : { [key: string]: T; } >key : string >y : Record diff --git a/tests/baselines/reference/indexSignatureOfTypeUnknownStillRequiresIndexSignature.types b/tests/baselines/reference/indexSignatureOfTypeUnknownStillRequiresIndexSignature.types index 4761d930a15b0..29879fc79cf3e 100644 --- a/tests/baselines/reference/indexSignatureOfTypeUnknownStillRequiresIndexSignature.types +++ b/tests/baselines/reference/indexSignatureOfTypeUnknownStillRequiresIndexSignature.types @@ -2,7 +2,7 @@ === indexSignatureOfTypeUnknownStillRequiresIndexSignature.ts === declare function f(x: { [x: string]: T }): T; ->f : (x: { [x: string]: T; }) => T +>f : (x: { [x: string]: T;}) => T >x : { [x: string]: T; } >x : string diff --git a/tests/baselines/reference/indexSignatures1.types b/tests/baselines/reference/indexSignatures1.types index 144face6af93b..fbc2477613b44 100644 --- a/tests/baselines/reference/indexSignatures1.types +++ b/tests/baselines/reference/indexSignatures1.types @@ -9,7 +9,7 @@ const sym = Symbol(); >Symbol : SymbolConstructor function gg3(x: { [key: string]: string }, y: { [key: symbol]: string }, z: { [sym]: number }) { ->gg3 : (x: { [key: string]: string; }, y: { [key: symbol]: string; }, z: { [sym]: number;}) => void +>gg3 : (x: { [key: string]: string;}, y: { [key: symbol]: string;}, z: { [sym]: number;}) => void >x : { [key: string]: string; } >key : string >y : { [key: symbol]: string; } @@ -32,7 +32,7 @@ function gg3(x: { [key: string]: string }, y: { [key: symbol]: string }, z: { [s // Overlapping index signatures function gg1(x: { [key: `a${string}`]: string, [key: `${string}a`]: string }, y: { [key: `a${string}a`]: string }) { ->gg1 : (x: { [key: `a${string}`]: string; [key: `${string}a`]: string; }, y: { [key: `a${string}a`]: string; }) => void +>gg1 : (x: { [key: `a${string}`]: string; [key: `${string}a`]: string;}, y: { [key: `a${string}a`]: string;}) => void >x : { [key: `a${string}`]: string; [key: `${string}a`]: string; } >key : `a${string}` >key : `${string}a` @@ -849,7 +849,7 @@ const directive = Symbol('directive'); >'directive' : "directive" declare function foo(options: { [x in string]: (arg: TArg) => TRet } & { [directive]?: TDir }): void; ->foo : (options: { [x: string]: (arg: TArg) => TRet; } & { [directive]?: TDir | undefined; }) => void +>foo : (options: { [x in string]: (arg: TArg) => TRet;} & { [directive]?: TDir;}) => void >options : { [x: string]: (arg: TArg) => TRet; } & { [directive]?: TDir | undefined; } >arg : TArg >[directive] : TDir | undefined diff --git a/tests/baselines/reference/indexSignaturesInferentialTyping.types b/tests/baselines/reference/indexSignaturesInferentialTyping.types index 9d5d0be42c466..f853b4490ddbf 100644 --- a/tests/baselines/reference/indexSignaturesInferentialTyping.types +++ b/tests/baselines/reference/indexSignaturesInferentialTyping.types @@ -2,13 +2,13 @@ === indexSignaturesInferentialTyping.ts === function foo(items: { [index: number]: T }): T { return undefined; } ->foo : (items: { [index: number]: T; }) => T +>foo : (items: { [index: number]: T;}) => T >items : { [index: number]: T; } >index : number >undefined : undefined function bar(items: { [index: string]: T }): T { return undefined; } ->bar : (items: { [index: string]: T; }) => T +>bar : (items: { [index: string]: T;}) => T >items : { [index: string]: T; } >index : string >undefined : undefined diff --git a/tests/baselines/reference/indexerReturningTypeParameter1.types b/tests/baselines/reference/indexerReturningTypeParameter1.types index d691d27c4dd43..ddc46141f0611 100644 --- a/tests/baselines/reference/indexerReturningTypeParameter1.types +++ b/tests/baselines/reference/indexerReturningTypeParameter1.types @@ -3,7 +3,7 @@ === indexerReturningTypeParameter1.ts === interface f { groupBy(): { [key: string]: T[]; }; ->groupBy : () => { [key: string]: T[]; } +>groupBy : () => { [key: string]: T[];} >key : string } var a: f; @@ -20,7 +20,7 @@ class c { >c : c groupBy(): { [key: string]: T[]; } { ->groupBy : () => { [key: string]: T[]; } +>groupBy : () => { [key: string]: T[];} >key : string return null; diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types index 7d001af103620..5d84cf56eae6f 100644 --- a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types +++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types @@ -522,7 +522,7 @@ class ClassWithConvert { >val : T convert(converter: { to: (v: T) => T; }) { } ->convert : (converter: { to: (v: T) => T; }) => void +>convert : (converter: { to: (v: T) => T;}) => void >converter : { to: (v: T) => T; } >to : (v: T) => T >v : T diff --git a/tests/baselines/reference/inferPropertyWithContextSensitiveReturnStatement.types b/tests/baselines/reference/inferPropertyWithContextSensitiveReturnStatement.types index fdf38766558b9..2a4fe954e188e 100644 --- a/tests/baselines/reference/inferPropertyWithContextSensitiveReturnStatement.types +++ b/tests/baselines/reference/inferPropertyWithContextSensitiveReturnStatement.types @@ -4,7 +4,7 @@ // repro #50687 declare function repro(config: { ->repro : (config: { params: T; callback: () => (params: T) => number; }) => void +>repro : (config: { params: T; callback: () => (params: T) => number;}) => void >config : { params: T; callback: () => (params: T) => number; } params: T; diff --git a/tests/baselines/reference/inferTypesWithExtends1.types b/tests/baselines/reference/inferTypesWithExtends1.types index 24144d8f187aa..75fae91fb606f 100644 --- a/tests/baselines/reference/inferTypesWithExtends1.types +++ b/tests/baselines/reference/inferTypesWithExtends1.types @@ -310,7 +310,7 @@ type IfEquals = (() => T extends X ? 1 : 2) extends () => T ex >IfEquals : IfEquals declare const x1: () => (T extends infer U extends number ? 1 : 0); ->x1 : () => T extends infer U extends number ? 1 : 0 +>x1 : () => (T extends infer U extends number ? 1 : 0) function f1() { >f1 : () => () => T extends infer U extends number ? 1 : 0 @@ -323,7 +323,7 @@ type ExpectNumber = T; >ExpectNumber : T declare const x2: () => (T extends ExpectNumber ? 1 : 0); ->x2 : () => T extends infer U extends number ? 1 : 0 +>x2 : () => (T extends ExpectNumber ? 1 : 0) function f2() { >f2 : () => () => T extends infer U extends number ? 1 : 0 diff --git a/tests/baselines/reference/inferenceDoesNotAddUndefinedOrNull.types b/tests/baselines/reference/inferenceDoesNotAddUndefinedOrNull.types index fb0cadb30bedc..123c4ed08a176 100644 --- a/tests/baselines/reference/inferenceDoesNotAddUndefinedOrNull.types +++ b/tests/baselines/reference/inferenceDoesNotAddUndefinedOrNull.types @@ -5,7 +5,7 @@ interface NodeArray extends ReadonlyArray {} interface Node { forEachChild(cbNode: (node: Node) => T | undefined, cbNodeArray?: (nodes: NodeArray) => T | undefined): T | undefined; ->forEachChild : (cbNode: (node: Node) => T | undefined, cbNodeArray?: ((nodes: NodeArray) => T | undefined) | undefined) => T | undefined +>forEachChild : (cbNode: (node: Node) => T | undefined, cbNodeArray?: (nodes: NodeArray) => T | undefined) => T | undefined >cbNode : (node: Node) => T | undefined >node : Node >cbNodeArray : ((nodes: NodeArray) => T | undefined) | undefined diff --git a/tests/baselines/reference/inferenceOptionalProperties.types b/tests/baselines/reference/inferenceOptionalProperties.types index a31c9c350bf7c..23c6edc450770 100644 --- a/tests/baselines/reference/inferenceOptionalProperties.types +++ b/tests/baselines/reference/inferenceOptionalProperties.types @@ -2,7 +2,7 @@ === inferenceOptionalProperties.ts === declare function test(x: { [key: string]: T }): T; ->test : (x: { [key: string]: T; }) => T +>test : (x: { [key: string]: T;}) => T >x : { [key: string]: T; } >key : string diff --git a/tests/baselines/reference/inferenceOptionalPropertiesStrict.types b/tests/baselines/reference/inferenceOptionalPropertiesStrict.types index 0e42a10b2a432..01cca0a641f6b 100644 --- a/tests/baselines/reference/inferenceOptionalPropertiesStrict.types +++ b/tests/baselines/reference/inferenceOptionalPropertiesStrict.types @@ -2,7 +2,7 @@ === inferenceOptionalPropertiesStrict.ts === declare function test(x: { [key: string]: T }): T; ->test : (x: { [key: string]: T; }) => T +>test : (x: { [key: string]: T;}) => T >x : { [key: string]: T; } >key : string diff --git a/tests/baselines/reference/inferenceOptionalPropertiesToIndexSignatures.types b/tests/baselines/reference/inferenceOptionalPropertiesToIndexSignatures.types index d882f908a34b2..e018bf014d15f 100644 --- a/tests/baselines/reference/inferenceOptionalPropertiesToIndexSignatures.types +++ b/tests/baselines/reference/inferenceOptionalPropertiesToIndexSignatures.types @@ -2,7 +2,7 @@ === inferenceOptionalPropertiesToIndexSignatures.ts === declare function foo(obj: { [x: string]: T }): T; ->foo : (obj: { [x: string]: T; }) => T +>foo : (obj: { [x: string]: T;}) => T >obj : { [x: string]: T; } >x : string diff --git a/tests/baselines/reference/inferenceShouldFailOnEvolvingArrays.types b/tests/baselines/reference/inferenceShouldFailOnEvolvingArrays.types index f49245a49e12b..8414f53f51e91 100644 --- a/tests/baselines/reference/inferenceShouldFailOnEvolvingArrays.types +++ b/tests/baselines/reference/inferenceShouldFailOnEvolvingArrays.types @@ -4,7 +4,7 @@ // repro from https://github.com/Microsoft/TypeScript/issues/25675 // The type of `arg` blocks inference but simplifies to T. function logLength(arg: { [K in U]: T }[U]): T { ->logLength : (arg: { [K in U]: T; }[U]) => T +>logLength : (arg: { [K in U]: T;}[U]) => T >arg : { [K in U]: T; }[U] console.log(arg.length); @@ -35,7 +35,7 @@ z = logLength(42); // no error; T is inferred as `any` >42 : 42 function logFirstLength(arg: { [K in U]: T }[U]): T { ->logFirstLength : (arg: { [K in U]: T; }[U]) => T +>logFirstLength : (arg: { [K in U]: T;}[U]) => T >arg : { [K in U]: T; }[U] console.log(arg[0].length); diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types b/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types index a6f8ee49178b9..22f16e3857501 100644 --- a/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types @@ -2,9 +2,9 @@ === inferentialTypingWithFunctionTypeNested.ts === declare function map(x: T, f: () => { x: (s: T) => U }): U; ->map : (x: T, f: () => { x: (s: T) => U; }) => U +>map : (x: T, f: () => { x: (s: T) => U;}) => U >x : T ->f : () => { x: (s: T) => U; } +>f : () => { x: (s: T) => U;} >x : (s: T) => U >s : T diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types index 6f6794341460c..b3f36c1eb9ae2 100644 --- a/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types @@ -2,7 +2,7 @@ === inferentialTypingWithFunctionTypeZip.ts === var pair: (x: T) => (y: S) => { x: T; y: S; } ->pair : (x: T) => (y: S) => { x: T; y: S; } +>pair : (x: T) => (y: S) => { x: T; y: S;} >x : T >y : S >x : T diff --git a/tests/baselines/reference/inferingFromAny.types b/tests/baselines/reference/inferingFromAny.types index a022326b86517..83c1e675d8b80 100644 --- a/tests/baselines/reference/inferingFromAny.types +++ b/tests/baselines/reference/inferingFromAny.types @@ -49,12 +49,12 @@ declare function f9(x: new () => T): T; >x : new () => T declare function f10(x: { [x: string]: T }): T; ->f10 : (x: { [x: string]: T; }) => T +>f10 : (x: { [x: string]: T;}) => T >x : { [x: string]: T; } >x : string declare function f11(x: { [x: number]: T }): T; ->f11 : (x: { [x: number]: T; }) => T +>f11 : (x: { [x: number]: T;}) => T >x : { [x: number]: T; } >x : number @@ -82,7 +82,7 @@ declare function f16(x: Partial): T; >x : Partial declare function f17(x: {[P in keyof T]: K}): T; ->f17 : (x: { [P in keyof T]: K; }) => T +>f17 : (x: { [P in keyof T]: K;}) => T >x : { [P in keyof T]: K; } declare function f18(x: {[P in K]: T[P]}): T; diff --git a/tests/baselines/reference/inferredIndexerOnNamespaceImport.types b/tests/baselines/reference/inferredIndexerOnNamespaceImport.types index 1935a3a7c1f3e..61f3989968ca6 100644 --- a/tests/baselines/reference/inferredIndexerOnNamespaceImport.types +++ b/tests/baselines/reference/inferredIndexerOnNamespaceImport.types @@ -14,7 +14,7 @@ import * as foo from "./foo"; >foo : typeof foo function f(map: { [k: string]: number }) { ->f : (map: { [k: string]: number; }) => void +>f : (map: { [k: string]: number;}) => void >map : { [k: string]: number; } >k : string diff --git a/tests/baselines/reference/inferrenceInfiniteLoopWithSubtyping.types b/tests/baselines/reference/inferrenceInfiniteLoopWithSubtyping.types index 6a8632ec2a38d..3bb85736896c4 100644 --- a/tests/baselines/reference/inferrenceInfiniteLoopWithSubtyping.types +++ b/tests/baselines/reference/inferrenceInfiniteLoopWithSubtyping.types @@ -15,7 +15,7 @@ export class EnumTypeComposer { >EnumTypeComposer : EnumTypeComposer public setFields(fields: { [name: string]: { [key: string]: any } }): this; ->setFields : (fields: { [name: string]: { [key: string]: any; }; }) => this +>setFields : (fields: { [name: string]: { [key: string]: any; };}) => this >fields : { [name: string]: { [key: string]: any; }; } >name : string >key : string @@ -38,10 +38,10 @@ export class Resolver { >Resolver : Resolver public wrapArgs( ->wrapArgs : (cb: () => { [argName: string]: Thunk>; }) => void +>wrapArgs : (cb: () => { [argName: string]: Thunk>;}) => void cb: () => { ->cb : () => { [argName: string]: Thunk>; } +>cb : () => { [argName: string]: Thunk>;} [argName: string]: Thunk>; >argName : string diff --git a/tests/baselines/reference/instantiateContextualTypes.types b/tests/baselines/reference/instantiateContextualTypes.types index 24ba01d0a5b85..c49fd57ad2213 100644 --- a/tests/baselines/reference/instantiateContextualTypes.types +++ b/tests/baselines/reference/instantiateContextualTypes.types @@ -67,7 +67,7 @@ new GenericComponent({ initialValues: 12, nextValues: val => 12 }); // #22149 declare function useStringOrNumber(t: T, useIt: T extends string ? ((s: string) => void) : ((n: number) => void)): void; ->useStringOrNumber : (t: T, useIt: T extends string ? (s: string) => void : (n: number) => void) => void +>useStringOrNumber : (t: T, useIt: T extends string ? ((s: string) => void) : ((n: number) => void)) => void >t : T >useIt : T extends string ? (s: string) => void : (n: number) => void >s : string diff --git a/tests/baselines/reference/intraExpressionInferences.types b/tests/baselines/reference/intraExpressionInferences.types index e38c271c8614a..9f4d02b6b3ed9 100644 --- a/tests/baselines/reference/intraExpressionInferences.types +++ b/tests/baselines/reference/intraExpressionInferences.types @@ -4,7 +4,7 @@ // Repros from #47599 declare function callIt(obj: { ->callIt : (obj: { produce: (n: number) => T; consume: (x: T) => void; }) => void +>callIt : (obj: { produce: (n: number) => T; consume: (x: T) => void;}) => void >obj : { produce: (n: number) => T; consume: (x: T) => void; } produce: (n: number) => T, @@ -160,7 +160,7 @@ const myGeneric = inferTypeFn({ // Repro #38623 function make(o: { mutations: M, action: (m: M) => void }) { } ->make : (o: { mutations: M; action: (m: M) => void; }) => void +>make : (o: { mutations: M; action: (m: M) => void;}) => void >o : { mutations: M; action: (m: M) => void; } >mutations : M >action : (m: M) => void @@ -193,7 +193,7 @@ make({ // Repro from #38845 declare function foo(options: { a: A, b: (a: A) => void }): void; ->foo : (options: { a: A; b: (a: A) => void; }) => void +>foo : (options: { a: A; b: (a: A) => void;}) => void >options : { a: A; b: (a: A) => void; } >a : A >b : (a: A) => void @@ -425,14 +425,14 @@ createMappingComponent({ // Repro from #48279 function simplified(props: { generator: () => T, receiver: (t: T) => any }) {} ->simplified : (props: { generator: () => T; receiver: (t: T) => any; }) => void +>simplified : (props: { generator: () => T; receiver: (t: T) => any;}) => void >props : { generator: () => T; receiver: (t: T) => any; } >generator : () => T >receiver : (t: T) => any >t : T function whatIWant(props: { generator: (bob: any) => T, receiver: (t: T) => any }) {} ->whatIWant : (props: { generator: (bob: any) => T; receiver: (t: T) => any; }) => void +>whatIWant : (props: { generator: (bob: any) => T; receiver: (t: T) => any;}) => void >props : { generator: (bob: any) => T; receiver: (t: T) => any; } >generator : (bob: any) => T >bob : any @@ -705,8 +705,8 @@ Foo({ }); declare function nested(arg: { ->nested : (arg: { prop: { produce: (arg1: number) => T; consume: (arg2: T) => void; }; }) => T ->arg : { prop: { produce: (arg1: number) => T; consume: (arg2: T) => void; }; } +>nested : (arg: { prop: { produce: (arg1: number) => T; consume: (arg2: T) => void; };}) => T +>arg : { prop: { produce: (arg1: number) => T; consume: (arg2: T) => void;}; } prop: { >prop : { produce: (arg1: number) => T; consume: (arg2: T) => void; } @@ -753,7 +753,7 @@ const resNested = nested({ }); declare function twoConsumers(arg: { ->twoConsumers : (arg: { a: (arg: string) => T; consume1: (arg1: T) => void; consume2: (arg2: T) => void; }) => T +>twoConsumers : (arg: { a: (arg: string) => T; consume1: (arg1: T) => void; consume2: (arg2: T) => void;}) => T >arg : { a: (arg: string) => T; consume1: (arg1: T) => void; consume2: (arg2: T) => void; } a: (arg: string) => T; @@ -796,7 +796,7 @@ const resTwoConsumers = twoConsumers({ }); declare function multipleProducersBeforeConsumers(arg: { ->multipleProducersBeforeConsumers : (arg: { a: (arg: string) => T; b: (arg: string) => T2; consume1: (arg1: T) => void; consume2: (arg2: T2) => void; }) => [T, T2] +>multipleProducersBeforeConsumers : (arg: { a: (arg: string) => T; b: (arg: string) => T2; consume1: (arg1: T) => void; consume2: (arg2: T2) => void;}) => [T, T2] >arg : { a: (arg: string) => T; b: (arg: string) => T2; consume1: (arg1: T) => void; consume2: (arg2: T2) => void; } a: (arg: string) => T; @@ -851,7 +851,7 @@ const resMultipleProducersBeforeConsumers = multipleProducersBeforeConsumers({ }); declare function withConditionalExpression(arg: { ->withConditionalExpression : (arg: { a: (arg1: string) => T; b: (arg2: T) => T2; c: (arg2: T2) => T3; }) => [T, T2, T3] +>withConditionalExpression : (arg: { a: (arg1: string) => T; b: (arg2: T) => T2; c: (arg2: T2) => T3;}) => [T, T2, T3] >arg : { a: (arg1: string) => T; b: (arg2: T) => T2; c: (arg2: T2) => T3; } a: (arg1: string) => T; @@ -908,15 +908,15 @@ const resWithConditionalExpression = withConditionalExpression({ }); declare function onion(arg: { ->onion : (arg: { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3; }; }; }) => [T, T2, T3] ->arg : { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3; }; }; } +>onion : (arg: { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3; }; };}) => [T, T2, T3] +>arg : { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3; };}; } a: (arg1: string) => T; >a : (arg1: string) => T >arg1 : string nested: { ->nested : { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3; }; } +>nested : { b: (arg2: T) => T2; nested2: { c: (arg2: T2) => T3;}; } b: (arg2: T) => T2; >b : (arg2: T) => T2 @@ -977,15 +977,15 @@ const resOnion = onion({ }); declare function onion2(arg: { ->onion2 : (arg: { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4; }; }; }) => [T, T2, T3, T4] ->arg : { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4; }; }; } +>onion2 : (arg: { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4; }; };}) => [T, T2, T3, T4] +>arg : { a: (arg1: string) => T; nested: { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4; };}; } a: (arg1: string) => T; >a : (arg1: string) => T >arg1 : string nested: { ->nested : { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4; }; } +>nested : { b: (arg2: T) => T2; c: (arg3: T) => T3; nested2: { d: (arg4: T3) => T4;}; } b: (arg2: T) => T2; >b : (arg2: T) => T2 @@ -1058,14 +1058,14 @@ const resOnion2 = onion2({ }); declare function distant(args: { ->distant : (args: { foo: { bar: { baz: { producer: (arg: string) => T; }; }; }; consumer: (val: T) => unknown; }) => T ->args : { foo: { bar: { baz: { producer: (arg: string) => T; }; }; }; consumer: (val: T) => unknown; } +>distant : (args: { foo: { bar: { baz: { producer: (arg: string) => T; }; }; }; consumer: (val: T) => unknown;}) => T +>args : { foo: { bar: { baz: { producer: (arg: string) => T; }; };}; consumer: (val: T) => unknown; } foo: { ->foo : { bar: { baz: { producer: (arg: string) => T; }; }; } +>foo : { bar: { baz: { producer: (arg: string) => T; };}; } bar: { ->bar : { baz: { producer: (arg: string) => T; }; } +>bar : { baz: { producer: (arg: string) => T;}; } baz: { >baz : { producer: (arg: string) => T; } diff --git a/tests/baselines/reference/isomorphicMappedTypeInference.types b/tests/baselines/reference/isomorphicMappedTypeInference.types index 60ff2845704d7..861506eb9b788 100644 --- a/tests/baselines/reference/isomorphicMappedTypeInference.types +++ b/tests/baselines/reference/isomorphicMappedTypeInference.types @@ -273,7 +273,7 @@ function f4() { } function makeRecord(obj: { [P in K]: T }) { ->makeRecord : (obj: { [P in K]: T; }) => { [P in K]: T; } +>makeRecord : (obj: { [P in K]: T;}) => { [P in K]: T; } >obj : { [P in K]: T; } return obj; @@ -323,7 +323,7 @@ function f5(s: string) { } function makeDictionary(obj: { [x: string]: T }) { ->makeDictionary : (obj: { [x: string]: T; }) => { [x: string]: T; } +>makeDictionary : (obj: { [x: string]: T;}) => { [x: string]: T; } >obj : { [x: string]: T; } >x : string diff --git a/tests/baselines/reference/jsFileImportPreservedWhenUsed.types b/tests/baselines/reference/jsFileImportPreservedWhenUsed.types index 7323354b91eef..7e58a48ed40e1 100644 --- a/tests/baselines/reference/jsFileImportPreservedWhenUsed.types +++ b/tests/baselines/reference/jsFileImportPreservedWhenUsed.types @@ -9,7 +9,7 @@ type ObjectIterator = (value: TObject[keyof TObject], key: str interface LoDashStatic { mapValues(obj: T | null | undefined, callback: ObjectIterator): { [P in keyof T]: TResult }; ->mapValues : (obj: T | null | undefined, callback: ObjectIterator) => { [P in keyof T]: TResult; } +>mapValues : (obj: T | null | undefined, callback: ObjectIterator) => { [P in keyof T]: TResult;} >obj : T | null | undefined >callback : ObjectIterator } diff --git a/tests/baselines/reference/jsxChildrenGenericContextualTypes.types b/tests/baselines/reference/jsxChildrenGenericContextualTypes.types index 01bf65beb0045..ceb6da2de0364 100644 --- a/tests/baselines/reference/jsxChildrenGenericContextualTypes.types +++ b/tests/baselines/reference/jsxChildrenGenericContextualTypes.types @@ -14,8 +14,8 @@ namespace JSX { >key : string } const Elem = (p: { prop: T, children: (t: T) => T }) =>
; ->Elem : (p: { prop: T; children: (t: T) => T; }) => JSX.Element ->(p: { prop: T, children: (t: T) => T }) =>
: (p: { prop: T; children: (t: T) => T; }) => JSX.Element +>Elem : (p: { prop: T; children: (t: T) => T;}) => JSX.Element +>(p: { prop: T, children: (t: T) => T }) =>
: (p: { prop: T; children: (t: T) => T;}) => JSX.Element >p : { prop: T; children: (t: T) => T; } >prop : T >children : (t: T) => T diff --git a/tests/baselines/reference/jsxComplexSignatureHasApplicabilityError.types b/tests/baselines/reference/jsxComplexSignatureHasApplicabilityError.types index 4d5c603e4b9cc..f4469f2d90538 100644 --- a/tests/baselines/reference/jsxComplexSignatureHasApplicabilityError.types +++ b/tests/baselines/reference/jsxComplexSignatureHasApplicabilityError.types @@ -165,7 +165,7 @@ export type FilterOptionsHandler = (options: OptionscurrentValues : Options export type InputRendererHandler = (props: { [key: string]: any }) => HandlerRendererResult; ->InputRendererHandler : (props: { [key: string]: any; }) => HandlerRendererResult +>InputRendererHandler : (props: { [key: string]: any;}) => HandlerRendererResult >props : { [key: string]: any; } >key : string diff --git a/tests/baselines/reference/jsxElementType.types b/tests/baselines/reference/jsxElementType.types index a66a2d0234b0c..affea4c2f8f54 100644 --- a/tests/baselines/reference/jsxElementType.types +++ b/tests/baselines/reference/jsxElementType.types @@ -63,8 +63,8 @@ let Component: NewReactJSXElementConstructor<{ title: string }>; >title : string const RenderElement = ({ title }: { title: string }) =>
{title}
; ->RenderElement : ({ title }: { title: string; }) => JSX.Element ->({ title }: { title: string }) =>
{title}
: ({ title }: { title: string; }) => JSX.Element +>RenderElement : ({ title }: { title: string;}) => JSX.Element +>({ title }: { title: string }) =>
{title}
: ({ title }: { title: string;}) => JSX.Element >title : string >title : string >
{title}
: JSX.Element @@ -92,8 +92,8 @@ Component = RenderElement; >excessProp : true const RenderString = ({ title }: { title: string }) => title; ->RenderString : ({ title }: { title: string; }) => string ->({ title }: { title: string }) => title : ({ title }: { title: string; }) => string +>RenderString : ({ title }: { title: string;}) => string +>({ title }: { title: string }) => title : ({ title }: { title: string;}) => string >title : string >title : string >title : string @@ -118,8 +118,8 @@ Component = RenderString; >excessProp : true const RenderNumber = ({ title }: { title: string }) => title.length; ->RenderNumber : ({ title }: { title: string; }) => number ->({ title }: { title: string }) => title.length : ({ title }: { title: string; }) => number +>RenderNumber : ({ title }: { title: string;}) => number +>({ title }: { title: string }) => title.length : ({ title }: { title: string;}) => number >title : string >title : string >title.length : number @@ -146,8 +146,8 @@ Component = RenderNumber; >excessProp : true const RenderArray = ({ title }: { title: string }) => [title]; ->RenderArray : ({ title }: { title: string; }) => string[] ->({ title }: { title: string }) => [title] : ({ title }: { title: string; }) => string[] +>RenderArray : ({ title }: { title: string;}) => string[] +>({ title }: { title: string }) => [title] : ({ title }: { title: string;}) => string[] >title : string >title : string >[title] : string[] @@ -174,8 +174,8 @@ Component = RenderArray; // React Server Component const RenderPromise = async ({ title }: { title: string }) => "react"; ->RenderPromise : ({ title }: { title: string; }) => Promise ->async ({ title }: { title: string }) => "react" : ({ title }: { title: string; }) => Promise +>RenderPromise : ({ title }: { title: string;}) => Promise +>async ({ title }: { title: string }) => "react" : ({ title }: { title: string;}) => Promise >title : string >title : string >"react" : "react" diff --git a/tests/baselines/reference/keyofAndForIn.types b/tests/baselines/reference/keyofAndForIn.types index 96411eb419438..fd7d6728ad909 100644 --- a/tests/baselines/reference/keyofAndForIn.types +++ b/tests/baselines/reference/keyofAndForIn.types @@ -4,7 +4,7 @@ // Repro from #12513 function f1(obj: { [P in K]: T }, k: K) { ->f1 : (obj: { [P in K]: T; }, k: K) => void +>f1 : (obj: { [P in K]: T;}, k: K) => void >obj : { [P in K]: T; } >k : K diff --git a/tests/baselines/reference/keyofAndIndexedAccess.js b/tests/baselines/reference/keyofAndIndexedAccess.js index ea10cf32f5e50..f01984be13ad3 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.js +++ b/tests/baselines/reference/keyofAndIndexedAccess.js @@ -1219,13 +1219,13 @@ declare function f81(obj: T): T["a"]["x"]; +}>(obj: T): T['a']['x']; declare function f82(): void; declare function f83(obj: T, key: K): T[K]["x"]; +}, K extends keyof T>(obj: T, key: K): T[K]['x']; declare function f84(): void; declare class C1 { x: number; diff --git a/tests/baselines/reference/keyofAndIndexedAccess.types b/tests/baselines/reference/keyofAndIndexedAccess.types index 4cec41efc9f42..724877840e23a 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.types +++ b/tests/baselines/reference/keyofAndIndexedAccess.types @@ -657,7 +657,7 @@ function f51(k: K, s: string) { } function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { ->f52 : (obj: { [x: string]: boolean; }, k: Exclude, s: string, n: number) => void +>f52 : (obj: { [x: string]: boolean;}, k: Exclude, s: string, n: number) => void >obj : { [x: string]: boolean; } >x : string >k : Exclude @@ -684,7 +684,7 @@ function f52(obj: { [x: string]: boolean }, k: Exclude, s: s } function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { ->f53 : >(obj: { [x: string]: boolean; }, k: K, s: string, n: number) => void +>f53 : >(obj: { [x: string]: boolean;}, k: K, s: string, n: number) => void >obj : { [x: string]: boolean; } >x : string >k : K @@ -1782,7 +1782,7 @@ function updateIds, K extends string>( // Repro from #13285 function updateIds2( ->updateIds2 : (obj: T, key: K, stringMap: { [oldId: string]: string; }) => void +>updateIds2 : (obj: T, key: K, stringMap: { [oldId: string]: string;}) => void >x : string obj: T, diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.types b/tests/baselines/reference/keyofAndIndexedAccess2.types index 1fa744bb17df6..75f8fa87095d5 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.types +++ b/tests/baselines/reference/keyofAndIndexedAccess2.types @@ -81,7 +81,7 @@ function f1(obj: { a: number, b: 0 | 1, c: string }, k0: 'a', k1: 'a' | 'b', k2: } function f2(a: { x: number, y: number }, b: { [key: string]: number }, c: T, k: keyof T) { ->f2 : (a: { x: number; y: number;}, b: { [key: string]: number; }, c: T, k: keyof T) => void +>f2 : (a: { x: number; y: number;}, b: { [key: string]: number;}, c: T, k: keyof T) => void >key : string >a : { x: number; y: number; } >x : number @@ -171,7 +171,7 @@ function f2(a: { x: number, y: number }, b: } function f3(a: { [P in K]: number }, b: { [key: string]: number }, k: K) { ->f3 : (a: { [P in K]: number; }, b: { [key: string]: number; }, k: K) => void +>f3 : (a: { [P in K]: number;}, b: { [key: string]: number;}, k: K) => void >a : { [P in K]: number; } >b : { [key: string]: number; } >key : string @@ -201,7 +201,7 @@ function f3(a: { [P in K]: number }, b: { [key: string]: numbe } function f3b(a: { [P in K]: number }, b: { [P in string]: number }, k: K) { ->f3b : (a: { [P in K]: number; }, b: { [x: string]: number; }, k: K) => void +>f3b : (a: { [P in K]: number;}, b: { [P_1 in string]: number;}, k: K) => void >a : { [P in K]: number; } >b : { [x: string]: number; } >k : K @@ -218,7 +218,7 @@ function f3b(a: { [P in K]: number }, b: { [P in string]: numb } function f4(a: { [key: string]: number }[K], b: number) { ->f4 : (a: number, b: number) => void +>f4 : (a: { [key: string]: number;}[K], b: number) => void >a : number >key : string >b : number diff --git a/tests/baselines/reference/logicalAssignment5(target=es2015).types b/tests/baselines/reference/logicalAssignment5(target=es2015).types index 288026e606178..d4be6e09c6ab2 100644 --- a/tests/baselines/reference/logicalAssignment5(target=es2015).types +++ b/tests/baselines/reference/logicalAssignment5(target=es2015).types @@ -2,7 +2,7 @@ === logicalAssignment5.ts === function foo1 (f?: (a: number) => void) { ->foo1 : (f?: ((a: number) => void) | undefined) => void +>foo1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -21,7 +21,7 @@ function foo1 (f?: (a: number) => void) { } function foo2 (f?: (a: number) => void) { ->foo2 : (f?: ((a: number) => void) | undefined) => void +>foo2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -40,7 +40,7 @@ function foo2 (f?: (a: number) => void) { } function foo3 (f?: (a: number) => void) { ->foo3 : (f?: ((a: number) => void) | undefined) => void +>foo3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -59,7 +59,7 @@ function foo3 (f?: (a: number) => void) { } function bar1 (f?: (a: number) => void) { ->bar1 : (f?: ((a: number) => void) | undefined) => void +>bar1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -84,7 +84,7 @@ function bar1 (f?: (a: number) => void) { } function bar2 (f?: (a: number) => void) { ->bar2 : (f?: ((a: number) => void) | undefined) => void +>bar2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -109,7 +109,7 @@ function bar2 (f?: (a: number) => void) { } function bar3 (f?: (a: number) => void) { ->bar3 : (f?: ((a: number) => void) | undefined) => void +>bar3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number diff --git a/tests/baselines/reference/logicalAssignment5(target=es2020).types b/tests/baselines/reference/logicalAssignment5(target=es2020).types index 288026e606178..d4be6e09c6ab2 100644 --- a/tests/baselines/reference/logicalAssignment5(target=es2020).types +++ b/tests/baselines/reference/logicalAssignment5(target=es2020).types @@ -2,7 +2,7 @@ === logicalAssignment5.ts === function foo1 (f?: (a: number) => void) { ->foo1 : (f?: ((a: number) => void) | undefined) => void +>foo1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -21,7 +21,7 @@ function foo1 (f?: (a: number) => void) { } function foo2 (f?: (a: number) => void) { ->foo2 : (f?: ((a: number) => void) | undefined) => void +>foo2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -40,7 +40,7 @@ function foo2 (f?: (a: number) => void) { } function foo3 (f?: (a: number) => void) { ->foo3 : (f?: ((a: number) => void) | undefined) => void +>foo3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -59,7 +59,7 @@ function foo3 (f?: (a: number) => void) { } function bar1 (f?: (a: number) => void) { ->bar1 : (f?: ((a: number) => void) | undefined) => void +>bar1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -84,7 +84,7 @@ function bar1 (f?: (a: number) => void) { } function bar2 (f?: (a: number) => void) { ->bar2 : (f?: ((a: number) => void) | undefined) => void +>bar2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -109,7 +109,7 @@ function bar2 (f?: (a: number) => void) { } function bar3 (f?: (a: number) => void) { ->bar3 : (f?: ((a: number) => void) | undefined) => void +>bar3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number diff --git a/tests/baselines/reference/logicalAssignment5(target=es2021).types b/tests/baselines/reference/logicalAssignment5(target=es2021).types index 288026e606178..d4be6e09c6ab2 100644 --- a/tests/baselines/reference/logicalAssignment5(target=es2021).types +++ b/tests/baselines/reference/logicalAssignment5(target=es2021).types @@ -2,7 +2,7 @@ === logicalAssignment5.ts === function foo1 (f?: (a: number) => void) { ->foo1 : (f?: ((a: number) => void) | undefined) => void +>foo1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -21,7 +21,7 @@ function foo1 (f?: (a: number) => void) { } function foo2 (f?: (a: number) => void) { ->foo2 : (f?: ((a: number) => void) | undefined) => void +>foo2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -40,7 +40,7 @@ function foo2 (f?: (a: number) => void) { } function foo3 (f?: (a: number) => void) { ->foo3 : (f?: ((a: number) => void) | undefined) => void +>foo3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -59,7 +59,7 @@ function foo3 (f?: (a: number) => void) { } function bar1 (f?: (a: number) => void) { ->bar1 : (f?: ((a: number) => void) | undefined) => void +>bar1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -84,7 +84,7 @@ function bar1 (f?: (a: number) => void) { } function bar2 (f?: (a: number) => void) { ->bar2 : (f?: ((a: number) => void) | undefined) => void +>bar2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -109,7 +109,7 @@ function bar2 (f?: (a: number) => void) { } function bar3 (f?: (a: number) => void) { ->bar3 : (f?: ((a: number) => void) | undefined) => void +>bar3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number diff --git a/tests/baselines/reference/logicalAssignment5(target=esnext).types b/tests/baselines/reference/logicalAssignment5(target=esnext).types index 288026e606178..d4be6e09c6ab2 100644 --- a/tests/baselines/reference/logicalAssignment5(target=esnext).types +++ b/tests/baselines/reference/logicalAssignment5(target=esnext).types @@ -2,7 +2,7 @@ === logicalAssignment5.ts === function foo1 (f?: (a: number) => void) { ->foo1 : (f?: ((a: number) => void) | undefined) => void +>foo1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -21,7 +21,7 @@ function foo1 (f?: (a: number) => void) { } function foo2 (f?: (a: number) => void) { ->foo2 : (f?: ((a: number) => void) | undefined) => void +>foo2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -40,7 +40,7 @@ function foo2 (f?: (a: number) => void) { } function foo3 (f?: (a: number) => void) { ->foo3 : (f?: ((a: number) => void) | undefined) => void +>foo3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -59,7 +59,7 @@ function foo3 (f?: (a: number) => void) { } function bar1 (f?: (a: number) => void) { ->bar1 : (f?: ((a: number) => void) | undefined) => void +>bar1 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -84,7 +84,7 @@ function bar1 (f?: (a: number) => void) { } function bar2 (f?: (a: number) => void) { ->bar2 : (f?: ((a: number) => void) | undefined) => void +>bar2 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number @@ -109,7 +109,7 @@ function bar2 (f?: (a: number) => void) { } function bar3 (f?: (a: number) => void) { ->bar3 : (f?: ((a: number) => void) | undefined) => void +>bar3 : (f?: (a: number) => void) => void >f : ((a: number) => void) | undefined >a : number diff --git a/tests/baselines/reference/mappedToToIndexSignatureInference.types b/tests/baselines/reference/mappedToToIndexSignatureInference.types index 004dbab92f3a1..85f550d455aff 100644 --- a/tests/baselines/reference/mappedToToIndexSignatureInference.types +++ b/tests/baselines/reference/mappedToToIndexSignatureInference.types @@ -2,7 +2,7 @@ === mappedToToIndexSignatureInference.ts === declare const fn: (object: { [Key in K]: V }) => object; ->fn : (object: { [Key in K]: V; }) => object +>fn : (object: { [Key in K]: V;}) => object >object : { [Key in K]: V; } declare const a: { [index: string]: number }; diff --git a/tests/baselines/reference/mappedTypeContextualTypesApplied.types b/tests/baselines/reference/mappedTypeContextualTypesApplied.types index 1eae71605fb49..d07a6e6678a27 100644 --- a/tests/baselines/reference/mappedTypeContextualTypesApplied.types +++ b/tests/baselines/reference/mappedTypeContextualTypesApplied.types @@ -20,27 +20,27 @@ declare function mapped3(obj: T): void >obj : T declare function mapped4(obj: T & {[P in keyof T]: TakeString}): void; ->mapped4 : (obj: T & { [P in keyof T]: TakeString; }) => void +>mapped4 : (obj: T & { [P in keyof T]: TakeString;}) => void >obj : T & { [P in keyof T]: TakeString; } declare function mapped5(obj: T & {[P in K]: TakeString}): void; ->mapped5 : (obj: T & { [P in K]: TakeString; }) => void +>mapped5 : (obj: T & { [P in K]: TakeString;}) => void >obj : T & { [P in K]: TakeString; } declare function mapped6(obj: {[P in K]: TakeString}): void; ->mapped6 : (obj: { [P in K]: TakeString; }) => void +>mapped6 : (obj: { [P in K]: TakeString;}) => void >obj : { [P in K]: TakeString; } declare function mapped7(obj: {[P in K]: TakeString}): void; ->mapped7 : (obj: { [P in K]: TakeString; }) => void +>mapped7 : (obj: { [P in K]: TakeString;}) => void >obj : { [P in K]: TakeString; } declare function mapped8(obj: {[P in K]: TakeString}): void; ->mapped8 : (obj: { [P in K]: TakeString; }) => void +>mapped8 : (obj: { [P in K]: TakeString;}) => void >obj : { [P in K]: TakeString; } declare function mapped9(obj: {[P in K]: TakeString}): void; ->mapped9 : (obj: { [P in K]: TakeString; }) => void +>mapped9 : (obj: { [P in K]: TakeString;}) => void >obj : { [P in K]: TakeString; } mapped1({foo: s => 42}); diff --git a/tests/baselines/reference/mappedTypeInferenceAliasSubstitution.types b/tests/baselines/reference/mappedTypeInferenceAliasSubstitution.types index 81b8294949d7e..ed57d3d5168cd 100644 --- a/tests/baselines/reference/mappedTypeInferenceAliasSubstitution.types +++ b/tests/baselines/reference/mappedTypeInferenceAliasSubstitution.types @@ -15,8 +15,8 @@ type Field
= { [K in A]: R } >Field : Field const f = (x: { [K in A]: Field }): R => ({} as any); ->f : (x: { [K in A]: Field; }) => R ->(x: { [K in A]: Field }): R => ({} as any) : (x: { [K in A]: Field; }) => R +>f : (x: { [K in A]: Field;}) => R +>(x: { [K in A]: Field }): R => ({} as any) : (x: { [K in A]: Field;}) => R >x : { [K in A]: Field; } >({} as any) : any >{} as any : any diff --git a/tests/baselines/reference/mappedTypeMultiInference.types b/tests/baselines/reference/mappedTypeMultiInference.types index 97491773a8ba3..c8661f2a38514 100644 --- a/tests/baselines/reference/mappedTypeMultiInference.types +++ b/tests/baselines/reference/mappedTypeMultiInference.types @@ -7,7 +7,7 @@ interface Style { } declare function mergeStyleSets( ->mergeStyleSets : (...cssSets: { [P in K]?: Style; }[]) => { [P_1 in K]: Style; } +>mergeStyleSets : (...cssSets: { [P in K]?: Style;}[]) => { [P_1 in K]: Style;} ...cssSets: { [P in K]?: Style }[]): { [P in K]: Style }; >cssSets : { [P in K]?: Style; }[] diff --git a/tests/baselines/reference/mappedTypeNestedGenericInstantiation.types b/tests/baselines/reference/mappedTypeNestedGenericInstantiation.types index 5ac316f60845d..beb32798d42a3 100644 --- a/tests/baselines/reference/mappedTypeNestedGenericInstantiation.types +++ b/tests/baselines/reference/mappedTypeNestedGenericInstantiation.types @@ -8,7 +8,7 @@ interface Chainable { >value : () => T mapValues(func: (v: T[keyof T]) => U): Chainable<{[k in keyof T]: U}>; ->mapValues : (func: (v: T[keyof T]) => U) => Chainable<{ [k in keyof T]: U; }> +>mapValues : (func: (v: T[keyof T]) => U) => Chainable<{ [k in keyof T]: U;}> >func : (v: T[keyof T]) => U >v : T[keyof T] } diff --git a/tests/baselines/reference/mappedTypeWithAny.types b/tests/baselines/reference/mappedTypeWithAny.types index c68bfd2ec981b..5d0c563123063 100644 --- a/tests/baselines/reference/mappedTypeWithAny.types +++ b/tests/baselines/reference/mappedTypeWithAny.types @@ -104,7 +104,7 @@ function bar(arrayish: Arrayish, objectish: Objectish, indirectArrayis } declare function stringifyArray(arr: T): { -readonly [K in keyof T]: string }; ->stringifyArray : (arr: T) => { -readonly [K in keyof T]: string; } +>stringifyArray : (arr: T) => { -readonly [K in keyof T]: string;} >arr : T let abc: any[] = stringifyArray(void 0 as any); @@ -116,7 +116,7 @@ let abc: any[] = stringifyArray(void 0 as any); >0 : 0 declare function stringifyPair(arr: T): { -readonly [K in keyof T]: string }; ->stringifyPair : (arr: T) => { -readonly [K in keyof T]: string; } +>stringifyPair : (arr: T) => { -readonly [K in keyof T]: string;} >arr : T let def: [any, any] = stringifyPair(void 0 as any); diff --git a/tests/baselines/reference/mappedTypes1.types b/tests/baselines/reference/mappedTypes1.types index 84073bfacda57..eb2e2bfdc16f4 100644 --- a/tests/baselines/reference/mappedTypes1.types +++ b/tests/baselines/reference/mappedTypes1.types @@ -77,16 +77,16 @@ type T47 = { [P in string | "a" | "b" | "0" | "1"]: void }; >T47 : { [x: string]: void; } declare function f1(): { [P in keyof T1]: void }; ->f1 : () => { [P in keyof T1]: void; } +>f1 : () => { [P in keyof T1]: void;} declare function f2(): { [P in keyof T1]: void }; ->f2 : () => { [P in keyof T1]: void; } +>f2 : () => { [P in keyof T1]: void;} declare function f3(): { [P in keyof T1]: void }; ->f3 : () => { [P in keyof T1]: void; } +>f3 : () => { [P in keyof T1]: void;} declare function f4(): { [P in keyof T1]: void }; ->f4 : () => { [P in keyof T1]: void; } +>f4 : () => { [P in keyof T1]: void;} let x1 = f1(); >x1 : {} diff --git a/tests/baselines/reference/methodSignaturesWithOverloads.types b/tests/baselines/reference/methodSignaturesWithOverloads.types index c216519d3a4bf..91f95a13b31e6 100644 --- a/tests/baselines/reference/methodSignaturesWithOverloads.types +++ b/tests/baselines/reference/methodSignaturesWithOverloads.types @@ -4,7 +4,7 @@ // Object type literals permit overloads with optionality but they must match var c: { ->c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string;}; } func4?(x: number): number; >func4 : { (x: number): number; (s: string): string; } diff --git a/tests/baselines/reference/methodSignaturesWithOverloads2.types b/tests/baselines/reference/methodSignaturesWithOverloads2.types index 2dead056a2c0a..9ebf4942cef0c 100644 --- a/tests/baselines/reference/methodSignaturesWithOverloads2.types +++ b/tests/baselines/reference/methodSignaturesWithOverloads2.types @@ -4,7 +4,7 @@ // Object type literals permit overloads with optionality but they must match var c: { ->c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string;}; } func4?(x: number): number; >func4 : { (x: number): number; (s: string): string; } diff --git a/tests/baselines/reference/namedTupleMembers.js b/tests/baselines/reference/namedTupleMembers.js index febc9eec40eda..c5b5387ff1e82 100644 --- a/tests/baselines/reference/namedTupleMembers.js +++ b/tests/baselines/reference/namedTupleMembers.js @@ -133,7 +133,7 @@ export declare const func: Func; export declare function useState(initial: T): [value: T, setter: (T: any) => void]; export type Iter = Func<[step: number, iterations: number]>; export declare function readSegment([length, count]: [number, number]): void; -export declare const val: [number, number]; +export declare const val: Parameters[0]; export type RecursiveTupleA = [initial: string, next: RecursiveTupleA]; export type RecursiveTupleB = [first: string, ptr: RecursiveTupleB]; export type RecusiveRest = [first: string, ...rest: RecusiveRest[]]; diff --git a/tests/baselines/reference/noImplicitAnyDestructuringParameterDeclaration.types b/tests/baselines/reference/noImplicitAnyDestructuringParameterDeclaration.types index 91d51ace919de..d396f867a1bde 100644 --- a/tests/baselines/reference/noImplicitAnyDestructuringParameterDeclaration.types +++ b/tests/baselines/reference/noImplicitAnyDestructuringParameterDeclaration.types @@ -26,7 +26,7 @@ function f3([a]: [any], {b}: { b: any }, c: any, d: any) { >d : any } function f4({b}: { b }, x: { b }) { // error in type instead ->f4 : ({ b }: { b;}, x: { b;}) => void +>f4 : ({ b }: { b: any;}, x: { b: any;}) => void >b : any >b : any >x : { b: any; } diff --git a/tests/baselines/reference/noImplicitReturnsExclusions.types b/tests/baselines/reference/noImplicitReturnsExclusions.types index 9ee2be8951683..06d9bfa7d3731 100644 --- a/tests/baselines/reference/noImplicitReturnsExclusions.types +++ b/tests/baselines/reference/noImplicitReturnsExclusions.types @@ -147,7 +147,7 @@ declare class HistoryItem { interface Thenable { then( ->then : { (onfulfilled?: ((value: T) => TResult | Thenable) | undefined, onrejected?: ((reason: any) => TResult | Thenable) | undefined): Thenable; (onfulfilled?: ((value: T) => TResult_1 | Thenable) | undefined, onrejected?: ((reason: any) => void) | undefined): Thenable; } +>then : { (onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => TResult | Thenable): Thenable; (onfulfilled?: ((value: T) => TResult_1 | Thenable) | undefined, onrejected?: ((reason: any) => void) | undefined): Thenable; } onfulfilled?: (value: T) => TResult | Thenable, >onfulfilled : ((value: T) => TResult | Thenable) | undefined @@ -159,7 +159,7 @@ interface Thenable { ): Thenable; then( ->then : { (onfulfilled?: ((value: T) => TResult_1 | Thenable) | undefined, onrejected?: ((reason: any) => TResult_1 | Thenable) | undefined): Thenable; (onfulfilled?: ((value: T) => TResult | Thenable) | undefined, onrejected?: ((reason: any) => void) | undefined): Thenable; } +>then : { (onfulfilled?: ((value: T) => TResult_1 | Thenable) | undefined, onrejected?: ((reason: any) => TResult_1 | Thenable) | undefined): Thenable; (onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => void): Thenable; } onfulfilled?: (value: T) => TResult | Thenable, >onfulfilled : ((value: T) => TResult | Thenable) | undefined diff --git a/tests/baselines/reference/noUsedBeforeDefinedErrorInTypeContext.types b/tests/baselines/reference/noUsedBeforeDefinedErrorInTypeContext.types index 247f743b916ef..9e1af3aba2e96 100644 --- a/tests/baselines/reference/noUsedBeforeDefinedErrorInTypeContext.types +++ b/tests/baselines/reference/noUsedBeforeDefinedErrorInTypeContext.types @@ -10,7 +10,7 @@ interface IThing { var foo = { >foo : any ->{ one: {} as IThing,} : { one: IThing; } +>{ one: {} as IThing,} : { one: IThing; } one: {} as IThing, >one : IThing @@ -20,8 +20,8 @@ var foo = { } let baz = { ->baz : { two: IThing; } ->{ two: {} as IThing,} : { two: IThing; } +>baz : { two: IThing; } +>{ two: {} as IThing,} : { two: IThing; } two: {} as IThing, >two : IThing @@ -32,7 +32,7 @@ let baz = { let bar = { >bar : any ->{ three: {} as IThing,} : { three: IThing; } +>{ three: {} as IThing,} : { three: IThing; } three: {} as IThing, >three : IThing @@ -43,7 +43,7 @@ let bar = { const qwe = { >qwe : any ->{ four: {} as IThing,} : { four: IThing; } +>{ four: {} as IThing,} : { four: IThing; } four: {} as IThing, >four : IThing diff --git a/tests/baselines/reference/nonNullMappedType.types b/tests/baselines/reference/nonNullMappedType.types index 029edf764b34c..68daef4d785ef 100644 --- a/tests/baselines/reference/nonNullMappedType.types +++ b/tests/baselines/reference/nonNullMappedType.types @@ -2,7 +2,7 @@ === nonNullMappedType.ts === function f(p0: { [key in A]: {} | undefined }, p1: A) { ->f : (p0: { [key in A]: {} | undefined; }, p1: A) => void +>f : (p0: { [key in A]: {} | undefined;}, p1: A) => void >p0 : { [key in A]: {} | undefined; } >p1 : A diff --git a/tests/baselines/reference/objectLiteralComputedNameNoDeclarationError.types b/tests/baselines/reference/objectLiteralComputedNameNoDeclarationError.types index d54309e2b08a2..427dc27985abc 100644 --- a/tests/baselines/reference/objectLiteralComputedNameNoDeclarationError.types +++ b/tests/baselines/reference/objectLiteralComputedNameNoDeclarationError.types @@ -2,8 +2,8 @@ === objectLiteralComputedNameNoDeclarationError.ts === const Foo = { ->Foo : { BANANA: "banana"; } ->{ BANANA: 'banana' as 'banana',} : { BANANA: "banana"; } +>Foo : { BANANA: 'banana'; } +>{ BANANA: 'banana' as 'banana',} : { BANANA: 'banana'; } BANANA: 'banana' as 'banana', >BANANA : "banana" @@ -18,7 +18,7 @@ export const Baa = { [Foo.BANANA]: 1 >[Foo.BANANA] : number >Foo.BANANA : "banana" ->Foo : { BANANA: "banana"; } +>Foo : { BANANA: 'banana'; } >BANANA : "banana" >1 : 1 diff --git a/tests/baselines/reference/objectRest.types b/tests/baselines/reference/objectRest.types index 40b37d4fb5b56..2bc4d9b52e516 100644 --- a/tests/baselines/reference/objectRest.types +++ b/tests/baselines/reference/objectRest.types @@ -81,7 +81,7 @@ var { x, n1: { y, n2: { z, n3: { ...nr } } }, ...restrest } = nestedrest; >nestedrest : { x: number; n1: { y: number; n2: { z: number; n3: { n4: number; }; }; }; rest: number; restrest: number; } let complex: { x: { ka, ki }, y: number }; ->complex : { x: { ka; ki;}; y: number; } +>complex : { x: { ka: any; ki: any;}; y: number; } >x : { ka: any; ki: any; } >ka : any >ki : any diff --git a/tests/baselines/reference/objectRestAssignment.types b/tests/baselines/reference/objectRestAssignment.types index 855eb366b51a9..a249433db17bb 100644 --- a/tests/baselines/reference/objectRestAssignment.types +++ b/tests/baselines/reference/objectRestAssignment.types @@ -15,7 +15,7 @@ let rest: { }; >rest : {} let complex: { x: { ka, ki }, y: number }; ->complex : { x: { ka; ki;}; y: number; } +>complex : { x: { ka: any; ki: any;}; y: number; } >x : { ka: any; ki: any; } >ka : any >ki : any diff --git a/tests/baselines/reference/objectRestParameter.types b/tests/baselines/reference/objectRestParameter.types index 8054a9095a200..f032216be5dac 100644 --- a/tests/baselines/reference/objectRestParameter.types +++ b/tests/baselines/reference/objectRestParameter.types @@ -10,9 +10,9 @@ function cloneAgain({ a, ...clone }: { a: number, b: string }): void { } declare function suddenly(f: (a: { x: { z, ka }, y: string }) => void); ->suddenly : (f: (a: { x: { z; ka; }; y: string;}) => void) => any ->f : (a: { x: { z; ka; }; y: string;}) => void ->a : { x: { z; ka;}; y: string; } +>suddenly : (f: (a: { x: { z: any; ka: any; }; y: string;}) => void) => any +>f : (a: { x: { z: any; ka: any; }; y: string;}) => void +>a : { x: { z: any; ka: any;}; y: string; } >x : { z: any; ka: any; } >z : any >ka : any diff --git a/tests/baselines/reference/objectRestParameterES5.types b/tests/baselines/reference/objectRestParameterES5.types index 6d6494fc7025c..7a8c185ced5a8 100644 --- a/tests/baselines/reference/objectRestParameterES5.types +++ b/tests/baselines/reference/objectRestParameterES5.types @@ -10,9 +10,9 @@ function cloneAgain({ a, ...clone }: { a: number, b: string }): void { } declare function suddenly(f: (a: { x: { z, ka }, y: string }) => void); ->suddenly : (f: (a: { x: { z; ka; }; y: string;}) => void) => any ->f : (a: { x: { z; ka; }; y: string;}) => void ->a : { x: { z; ka;}; y: string; } +>suddenly : (f: (a: { x: { z: any; ka: any; }; y: string;}) => void) => any +>f : (a: { x: { z: any; ka: any; }; y: string;}) => void +>a : { x: { z: any; ka: any;}; y: string; } >x : { z: any; ka: any; } >z : any >ka : any diff --git a/tests/baselines/reference/observableInferenceCanBeMade.types b/tests/baselines/reference/observableInferenceCanBeMade.types index a3124e5fd9fb8..a82a69d21049e 100644 --- a/tests/baselines/reference/observableInferenceCanBeMade.types +++ b/tests/baselines/reference/observableInferenceCanBeMade.types @@ -16,7 +16,7 @@ type ObservedValueOf = O extends ObservableInput ? T : never; interface Subscribable { subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): void; ->subscribe : (next?: ((value: T) => void) | undefined, error?: ((error: any) => void) | undefined, complete?: () => void) => void +>subscribe : (next?: (value: T) => void, error?: (error: any) => void, complete?: () => void) => void >next : ((value: T) => void) | undefined >value : T >error : ((error: any) => void) | undefined @@ -31,7 +31,7 @@ declare class Observable implements Subscribable { >Observable : Observable subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): void; ->subscribe : (next?: ((value: T) => void) | undefined, error?: ((error: any) => void) | undefined, complete?: () => void) => void +>subscribe : (next?: (value: T) => void, error?: (error: any) => void, complete?: () => void) => void >next : ((value: T) => void) | undefined >value : T >error : ((error: any) => void) | undefined diff --git a/tests/baselines/reference/optionalChainingInference.types b/tests/baselines/reference/optionalChainingInference.types index 7bd2a8c2f7b76..3d7eab09edf14 100644 --- a/tests/baselines/reference/optionalChainingInference.types +++ b/tests/baselines/reference/optionalChainingInference.types @@ -36,8 +36,8 @@ const v1: number = unbox(b1); >b1 : { value: number; } const b2 = { value: su?.length as number | undefined }; ->b2 : { value: number; } ->{ value: su?.length as number | undefined } : { value: number; } +>b2 : { value: number | undefined; } +>{ value: su?.length as number | undefined } : { value: number | undefined; } >value : number >su?.length as number | undefined : number >su?.length : number @@ -48,7 +48,7 @@ const v2: number = unbox(b2); >v2 : number >unbox(b2) : number >unbox : (box: { value: T; }) => T ->b2 : { value: number; } +>b2 : { value: number | undefined; } const b3: { value: number | undefined } = { value: su?.length }; >b3 : { value: number | undefined; } diff --git a/tests/baselines/reference/override19.types b/tests/baselines/reference/override19.types index 8aa0d3c811bed..12a116f046b63 100644 --- a/tests/baselines/reference/override19.types +++ b/tests/baselines/reference/override19.types @@ -6,7 +6,7 @@ type Foo = abstract new(...args: any) => any; >args : any declare function CreateMixin(Context: C, Base: T): T & { ->CreateMixin : (Context: C, Base: T) => T & (new (...args: any[]) => { context: InstanceType;}) +>CreateMixin : (Context: C, Base: T) => T & { new (...args: any[]): { context: InstanceType; };} >Context : C >Base : T diff --git a/tests/baselines/reference/paramsOnlyHaveLiteralTypesWhenAppropriatelyContextualized.types b/tests/baselines/reference/paramsOnlyHaveLiteralTypesWhenAppropriatelyContextualized.types index f45353a2b0222..fa2fc418d9c95 100644 --- a/tests/baselines/reference/paramsOnlyHaveLiteralTypesWhenAppropriatelyContextualized.types +++ b/tests/baselines/reference/paramsOnlyHaveLiteralTypesWhenAppropriatelyContextualized.types @@ -9,7 +9,7 @@ type Lower = { [K in keyof T]: T[K] }; >Lower : Lower export function appendToOptionalArray< ->appendToOptionalArray : (object: { [x in K]?: Lower[] | undefined; }, key: K, value: T) => void +>appendToOptionalArray : (object: { [x in K]?: Lower[];}, key: K, value: T) => void K extends string | number | symbol, T diff --git a/tests/baselines/reference/privateNameInLhsReceiverExpression.types b/tests/baselines/reference/privateNameInLhsReceiverExpression.types index 550cf97a76157..68300b742b0a4 100644 --- a/tests/baselines/reference/privateNameInLhsReceiverExpression.types +++ b/tests/baselines/reference/privateNameInLhsReceiverExpression.types @@ -9,7 +9,7 @@ class Test { >123 : 123 static something(obj: { [key: string]: Test }) { ->something : (obj: { [key: string]: Test; }) => void +>something : (obj: { [key: string]: Test;}) => void >obj : { [key: string]: Test; } >key : string diff --git a/tests/baselines/reference/restTuplesFromContextualTypes.types b/tests/baselines/reference/restTuplesFromContextualTypes.types index a9de22bade988..e668ce861ca26 100644 --- a/tests/baselines/reference/restTuplesFromContextualTypes.types +++ b/tests/baselines/reference/restTuplesFromContextualTypes.types @@ -53,7 +53,7 @@ declare const t1: [number, boolean, string]; >t1 : [number, boolean, string] declare function f1(cb: (...args: typeof t1) => void): void; ->f1 : (cb: (args_0: number, args_1: boolean, args_2: string) => void) => void +>f1 : (cb: (...args: typeof t1) => void) => void >cb : (args_0: number, args_1: boolean, args_2: string) => void >args : [number, boolean, string] >t1 : [number, boolean, string] @@ -148,7 +148,7 @@ declare const t2: [number, boolean, ...string[]]; >t2 : [number, boolean, ...string[]] declare function f2(cb: (...args: typeof t2) => void): void; ->f2 : (cb: (args_0: number, args_1: boolean, ...args_2: string[]) => void) => void +>f2 : (cb: (...args: typeof t2) => void) => void >cb : (args_0: number, args_1: boolean, ...args_2: string[]) => void >args : [number, boolean, ...string[]] >t2 : [number, boolean, ...string[]] @@ -248,7 +248,7 @@ declare const t3: [boolean, ...string[]]; >t3 : [boolean, ...string[]] declare function f3(cb: (x: number, ...args: typeof t3) => void): void; ->f3 : (cb: (x: number, args_0: boolean, ...args_1: string[]) => void) => void +>f3 : (cb: (x: number, ...args: typeof t3) => void) => void >cb : (x: number, args_0: boolean, ...args_1: string[]) => void >x : number >args : [boolean, ...string[]] diff --git a/tests/baselines/reference/returnTypeTypeArguments.types b/tests/baselines/reference/returnTypeTypeArguments.types index 4934a1f1d75d8..d1f68991fc63d 100644 --- a/tests/baselines/reference/returnTypeTypeArguments.types +++ b/tests/baselines/reference/returnTypeTypeArguments.types @@ -137,7 +137,7 @@ class X } declare var a: { ->a : { p1: () => X; p2: { [idx: number]: any; }; p3: X[]; p4: I; p5: any; p6: () => Y; p7: { [idx: number]: any; }; p8: Y[]; p9: I; pa: any; } +>a : { p1: () => X; p2: { [idx: number]: X;}; p3: X[]; p4: I; p5: any; p6: () => Y; p7: { [idx: number]: Y;}; p8: Y[]; p9: I; pa: any; } p1: () => X; >p1 : () => any diff --git a/tests/baselines/reference/reverseMappedPartiallyInferableTypes.types b/tests/baselines/reference/reverseMappedPartiallyInferableTypes.types index eac9cbd9b1c25..aa0aa474b269a 100644 --- a/tests/baselines/reference/reverseMappedPartiallyInferableTypes.types +++ b/tests/baselines/reference/reverseMappedPartiallyInferableTypes.types @@ -47,7 +47,7 @@ export type PropsDefinition = RecordPropsDefinition; declare function extend({ props }: { props: PropsDefinition }): PropsDefinition; ->extend : ({ props }: { props: PropsDefinition; }) => PropsDefinition +>extend : ({ props }: { props: PropsDefinition;}) => PropsDefinition >props : RecordPropsDefinition >props : RecordPropsDefinition diff --git a/tests/baselines/reference/reverseMappedTypeIntersectionConstraint.types b/tests/baselines/reference/reverseMappedTypeIntersectionConstraint.types index 43b568dd83d87..b1a4b68905b2b 100644 --- a/tests/baselines/reference/reverseMappedTypeIntersectionConstraint.types +++ b/tests/baselines/reference/reverseMappedTypeIntersectionConstraint.types @@ -401,10 +401,10 @@ const child = () => Promise.resolve("foo"); >"foo" : "foo" const config = createXMachine({ ->config : { types: { actors: { src: "str"; logic: typeof child;}; }; invoke: { readonly src: "str"; }; } ->createXMachine({ types: {} as { actors: { src: "str"; logic: typeof child; }; }, invoke: { src: "str", }, extra: 10}) : { types: { actors: { src: "str"; logic: typeof child;}; }; invoke: { readonly src: "str"; }; } +>config : { types: { actors: { src: "str"; logic: typeof child; };}; invoke: { readonly src: "str"; }; } +>createXMachine({ types: {} as { actors: { src: "str"; logic: typeof child; }; }, invoke: { src: "str", }, extra: 10}) : { types: { actors: { src: "str"; logic: typeof child; };}; invoke: { readonly src: "str"; }; } >createXMachine : , TActor extends ProvidedActor = TConfig extends { types: { actors: ProvidedActor; }; } ? TConfig["types"]["actors"] : ProvidedActor>(config: { [K in keyof MachineConfig & keyof TConfig]: TConfig[K]; }) => TConfig ->{ types: {} as { actors: { src: "str"; logic: typeof child; }; }, invoke: { src: "str", }, extra: 10} : { types: { actors: { src: "str"; logic: typeof child;}; }; invoke: { src: "str"; }; extra: number; } +>{ types: {} as { actors: { src: "str"; logic: typeof child; }; }, invoke: { src: "str", }, extra: 10} : { types: { actors: { src: "str"; logic: typeof child; };}; invoke: { src: "str"; }; extra: number; } types: {} as { >types : { actors: { src: "str"; logic: typeof child;}; } diff --git a/tests/baselines/reference/specializedSignatureOverloadReturnTypeWithIndexers.types b/tests/baselines/reference/specializedSignatureOverloadReturnTypeWithIndexers.types index 2a798477a1880..f6643f5281bf2 100644 --- a/tests/baselines/reference/specializedSignatureOverloadReturnTypeWithIndexers.types +++ b/tests/baselines/reference/specializedSignatureOverloadReturnTypeWithIndexers.types @@ -3,45 +3,45 @@ === specializedSignatureOverloadReturnTypeWithIndexers.ts === interface A { f(p: string): { [p: string]: string; }; ->f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: string]: any; }; } +>f : { (p: string): { [p: string]: string;}; (p: "spec"): { [p: string]: any; }; } >p : string >p : string f(p: "spec"): { [p: string]: any; } // Should be ok ->f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: string]: any; }; } +>f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: string]: any;}; } >p : "spec" >p : string } interface B { f(p: string): { [p: number]: string; }; ->f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: string]: any; }; } +>f : { (p: string): { [p: number]: string;}; (p: "spec"): { [p: string]: any; }; } >p : string >p : number f(p: "spec"): { [p: string]: any; } // Should be ok ->f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: string]: any; }; } +>f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: string]: any;}; } >p : "spec" >p : string } interface C { f(p: string): { [p: number]: string; }; ->f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: number]: any; }; } +>f : { (p: string): { [p: number]: string;}; (p: "spec"): { [p: number]: any; }; } >p : string >p : number f(p: "spec"): { [p: number]: any; } // Should be ok ->f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: number]: any; }; } +>f : { (p: string): { [p: number]: string; }; (p: "spec"): { [p: number]: any;}; } >p : "spec" >p : number } interface D { f(p: string): { [p: string]: string; }; ->f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: number]: any; }; } +>f : { (p: string): { [p: string]: string;}; (p: "spec"): { [p: number]: any; }; } >p : string >p : string f(p: "spec"): { [p: number]: any; } // Should be error ->f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: number]: any; }; } +>f : { (p: string): { [p: string]: string; }; (p: "spec"): { [p: number]: any;}; } >p : "spec" >p : number } diff --git a/tests/baselines/reference/strictOptionalProperties1.types b/tests/baselines/reference/strictOptionalProperties1.types index 6dfefa5876bf7..aa439d7d64a25 100644 --- a/tests/baselines/reference/strictOptionalProperties1.types +++ b/tests/baselines/reference/strictOptionalProperties1.types @@ -2,7 +2,7 @@ === strictOptionalProperties1.ts === function f1(obj: { a?: string, b?: string | undefined }) { ->f1 : (obj: { a?: string; b?: string | undefined; }) => void +>f1 : (obj: { a?: string; b?: string | undefined;}) => void >obj : { a?: string; b?: string | undefined; } >a : string | undefined >b : string | undefined @@ -220,7 +220,7 @@ function f2(obj: { a?: string, b?: string | undefined }) { } function f3(obj: Partial<{ a: string, b: string | undefined }>) { ->f3 : (obj: Partial<{ a: string; b: string | undefined; }>) => void +>f3 : (obj: Partial<{ a: string; b: string | undefined;}>) => void >obj : Partial<{ a: string; b: string | undefined; }> >a : string >b : string | undefined diff --git a/tests/baselines/reference/strictSubtypeAndNarrowing.types b/tests/baselines/reference/strictSubtypeAndNarrowing.types index 3892eefe407d1..a1f440b17a109 100644 --- a/tests/baselines/reference/strictSubtypeAndNarrowing.types +++ b/tests/baselines/reference/strictSubtypeAndNarrowing.types @@ -336,7 +336,7 @@ declare function isArrayLike(value: any): value is { length: number }; >length : number function ff1(value: { [index: number]: boolean, length: number } | undefined) { ->ff1 : (value: { [index: number]: boolean; length: number; } | undefined) => void +>ff1 : (value: { [index: number]: boolean; length: number;} | undefined) => void >value : { [index: number]: boolean; length: number; } | undefined >index : number >length : number @@ -358,7 +358,7 @@ function ff1(value: { [index: number]: boolean, length: number } | undefined) { } function ff2(value: { [index: number]: boolean, length: number } | string) { ->ff2 : (value: string | { [index: number]: boolean; length: number; }) => void +>ff2 : (value: { [index: number]: boolean; length: number;} | string) => void >value : string | { [index: number]: boolean; length: number; } >index : number >length : number @@ -380,7 +380,7 @@ function ff2(value: { [index: number]: boolean, length: number } | string) { } function ff3(value: string | string[] | { [index: number]: boolean, length: number } | [number, boolean] | number | { length: string } | { a: string } | null | undefined) { ->ff3 : (value: string | number | { [index: number]: boolean; length: number; } | [number, boolean] | { length: string; } | { a: string; } | string[] | null | undefined) => void +>ff3 : (value: string | string[] | { [index: number]: boolean; length: number;} | [number, boolean] | number | { length: string;} | { a: string;} | null | undefined) => void >value : string | number | { [index: number]: boolean; length: number; } | [number, boolean] | { length: string; } | { a: string; } | string[] | null | undefined >index : number >length : number diff --git a/tests/baselines/reference/subtypingWithCallSignatures2.types b/tests/baselines/reference/subtypingWithCallSignatures2.types index 56aacd670482e..0c16bdef45100 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures2.types +++ b/tests/baselines/reference/subtypingWithCallSignatures2.types @@ -184,7 +184,7 @@ declare function foo14(a: any): any; >a : any declare function foo15(a: { ->foo15 : { (a: { (x: number): number[]; (x: string): string[]; }): typeof a; (a: any): any; } +>foo15 : { (a: { (x: number): number[]; (x: string): string[];}): typeof a; (a: any): any; } >a : { (x: number): number[]; (x: string): string[]; } (x: number): number[]; @@ -218,7 +218,7 @@ declare function foo16(a: any): any; >a : any declare function foo17(a: { ->foo17 : { (a: { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }): typeof a; (a: any): any; } +>foo17 : { (a: { (x: (a: number) => number): number[]; (x: (a: string) => string): string[];}): typeof a; (a: any): any; } >a : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } (x: (a: number) => number): number[]; @@ -237,8 +237,8 @@ declare function foo17(a: any): any; >a : any declare function foo18(a: { ->foo18 : { (a: { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; }): typeof a; (a: any): any; } ->a : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } +>foo18 : { (a: { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[];}): typeof a; (a: any): any; } +>a : { (x: { (a: number): number; (a: string): string;}): any[]; (x: { (a: boolean): boolean; (a: Date): Date;}): any[]; } (x: { >x : { (a: number): number; (a: string): string; } diff --git a/tests/baselines/reference/subtypingWithCallSignatures3.types b/tests/baselines/reference/subtypingWithCallSignatures3.types index 38349bb1ece68..d878133bde703 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures3.types +++ b/tests/baselines/reference/subtypingWithCallSignatures3.types @@ -110,8 +110,8 @@ module Errors { >a2 : any declare function foo16(a2: { ->foo16 : { (a2: { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }): { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }; (a2: any): any; } ->a2 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; } +>foo16 : { (a2: { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[];}): { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; }; (a2: any): any; } +>a2 : { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; } // type of parameter is overload set which means we can't do inference based on this type (x: { diff --git a/tests/baselines/reference/subtypingWithConstructSignatures2.types b/tests/baselines/reference/subtypingWithConstructSignatures2.types index 2b4f592cd3f38..84bd8c69e54f9 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures2.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures2.types @@ -184,7 +184,7 @@ declare function foo14(a: any): any; >a : any declare function foo15(a: { ->foo15 : { (a: { new (x: number): number[]; new (x: string): string[]; }): typeof a; (a: any): any; } +>foo15 : { (a: { new (x: number): number[]; new (x: string): string[];}): typeof a; (a: any): any; } >a : { new (x: number): number[]; new (x: string): string[]; } new (x: number): number[]; @@ -218,7 +218,7 @@ declare function foo16(a: any): any; >a : any declare function foo17(a: { ->foo17 : { (a: { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; }): typeof a; (a: any): any; } +>foo17 : { (a: { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[];}): typeof a; (a: any): any; } >a : { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; } new (x: (a: number) => number): number[]; @@ -237,8 +237,8 @@ declare function foo17(a: any): any; >a : any declare function foo18(a: { ->foo18 : { (a: { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; }): typeof a; (a: any): any; } ->a : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } +>foo18 : { (a: { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[];}): typeof a; (a: any): any; } +>a : { new (x: { new (a: number): number; new (a: string): string;}): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date;}): any[]; } new (x: { >x : { new (a: number): number; new (a: string): string; } diff --git a/tests/baselines/reference/subtypingWithConstructSignatures3.types b/tests/baselines/reference/subtypingWithConstructSignatures3.types index 7e2e81ca46cc7..38983724c5cc2 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures3.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures3.types @@ -110,8 +110,8 @@ module Errors { >a2 : any declare function foo16(a2: { ->foo16 : { (a2: { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }): { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }; (a2: any): any; } ->a2 : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; } +>foo16 : { (a2: { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[];}): { new (x: { new (a: number): number; new (a?: number): number;}): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean;}): boolean[]; }; (a2: any): any; } +>a2 : { new (x: { new (a: number): number; new (a?: number): number;}): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean;}): boolean[]; } // type of parameter is overload set which means we can't do inference based on this type new (x: { diff --git a/tests/baselines/reference/switchCaseCircularRefeference.types b/tests/baselines/reference/switchCaseCircularRefeference.types index 21d30958de5b2..28fb1b070ad77 100644 --- a/tests/baselines/reference/switchCaseCircularRefeference.types +++ b/tests/baselines/reference/switchCaseCircularRefeference.types @@ -4,7 +4,7 @@ // Repro from #9507 function f(x: {a: "A", b} | {a: "C", e}) { ->f : (x: { a: "A"; b;} | { a: "C"; e;}) => void +>f : (x: { a: "A"; b: any;} | { a: "C"; e: any;}) => void >x : { a: "A"; b: any; } | { a: "C"; e: any; } >a : "A" >b : any diff --git a/tests/baselines/reference/symbolProperty61.types b/tests/baselines/reference/symbolProperty61.types index 7e6482c2a095c..29b7ef6835236 100644 --- a/tests/baselines/reference/symbolProperty61.types +++ b/tests/baselines/reference/symbolProperty61.types @@ -51,7 +51,7 @@ type InteropObservable = { >InteropObservable : InteropObservable [Symbol.obs]: () => { subscribe(next: (val: T) => void): void } ->[Symbol.obs] : () => { subscribe(next: (val: T) => void): void; } +>[Symbol.obs] : () => { subscribe(next: (val: T) => void): void;} >Symbol.obs : unique symbol >Symbol : SymbolConstructor >obs : unique symbol diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types index 7fda78de0ffae..c0c2ab9e1073c 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types @@ -7,7 +7,7 @@ interface I { >subs : number[] member: { ->member : new (s: string) => new (n: number) => { new (): boolean;} +>member : new (s: string) => { new (n: number): { new (): boolean; };} new (s: string): { >s : string diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types index 7ca5153a048c7..85715c5dfc845 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types @@ -7,7 +7,7 @@ interface I { >subs : number[] member: { ->member : new (s: string) => new (n: number) => { new (): boolean;} +>member : new (s: string) => { new (n: number): { new (): boolean; };} new (s: string): { >s : string diff --git a/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types b/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types index 3d9a23e9aaa8e..3ac9fba42eb3d 100644 --- a/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types +++ b/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types @@ -2,7 +2,7 @@ === taggedTemplatesWithTypeArguments1.ts === declare function f(strs: TemplateStringsArray, ...callbacks: Array<(x: T) => any>): void; ->f : (strs: TemplateStringsArray, ...callbacks: ((x: T) => any)[]) => void +>f : (strs: TemplateStringsArray, ...callbacks: Array<(x: T) => any>) => void >strs : TemplateStringsArray >callbacks : ((x: T) => any)[] >x : T diff --git a/tests/baselines/reference/tslibReExportHelpers2.types b/tests/baselines/reference/tslibReExportHelpers2.types index 1c0b27ec23bd0..4ca51dbbcd372 100644 --- a/tests/baselines/reference/tslibReExportHelpers2.types +++ b/tests/baselines/reference/tslibReExportHelpers2.types @@ -2,7 +2,7 @@ === /node_modules/tslib/index.d.ts === export declare function __classPrivateFieldGet( ->__classPrivateFieldGet : { (receiver: T, state: { has(o: T): boolean; get(o: T): V | undefined; }, kind?: "f"): V; unknown, V_1>(receiver: T_1, state: T_1, kind: "f", f: { value: V_1; }): V_1; } +>__classPrivateFieldGet : { (receiver: T, state: { has(o: T): boolean; get(o: T): V | undefined;}, kind?: "f"): V; unknown, V_1>(receiver: T_1, state: T_1, kind: "f", f: { value: V_1; }): V_1; } receiver: T, >receiver : T diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments1.types b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments1.types index 54739ce5187d5..ed790c1f91c21 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments1.types +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments1.types @@ -38,7 +38,7 @@ function Baz(key1: T, value: U) { } declare function Link(l: {func: (arg: U)=>void}): JSX.Element; ->Link : (l: { func: (arg: U) => void; }) => JSX.Element +>Link : (l: { func: (arg: U) => void;}) => JSX.Element >l : { func: (arg: U) => void; } >func : (arg: U) => void >arg : U diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.types b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.types index aae77bbb45b6d..1cbca0da3ab32 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.types +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.types @@ -45,7 +45,7 @@ function Baz(arg: T) { } declare function Link(l: {func: (arg: U)=>void}): JSX.Element; ->Link : (l: { func: (arg: U) => void; }) => JSX.Element +>Link : (l: { func: (arg: U) => void;}) => JSX.Element >l : { func: (arg: U) => void; } >func : (arg: U) => void >arg : U diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types index 98db4b9d6b071..642080fe05e0a 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types @@ -83,14 +83,14 @@ function Baz(arg1: T, a } declare function Link(l: {func: (arg: U)=>void}): JSX.Element; ->Link : { (l: { func: (arg: U) => void; }): JSX.Element; (l: { func: (arg1: U_1, arg2: string) => void; }): JSX.Element; } +>Link : { (l: { func: (arg: U) => void;}): JSX.Element; (l: { func: (arg1: U_1, arg2: string) => void; }): JSX.Element; } >l : { func: (arg: U) => void; } >func : (arg: U) => void >arg : U >JSX : any declare function Link(l: {func: (arg1:U, arg2: string)=>void}): JSX.Element; ->Link : { (l: { func: (arg: U_1) => void; }): JSX.Element; (l: { func: (arg1: U, arg2: string) => void; }): JSX.Element; } +>Link : { (l: { func: (arg: U_1) => void; }): JSX.Element; (l: { func: (arg1: U, arg2: string) => void;}): JSX.Element; } >l : { func: (arg1: U, arg2: string) => void; } >func : (arg1: U, arg2: string) => void >arg1 : U diff --git a/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types b/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types index 29c99795bbcf8..29d365030c44b 100644 --- a/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types +++ b/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types @@ -68,7 +68,7 @@ enum E2 { X } // Check that we infer from both a.r and b before fixing T in a.w declare function f1(a: { w: (x: T) => U; r: () => T; }, b: T): U; ->f1 : (a: { w: (x: T) => U; r: () => T; }, b: T) => U +>f1 : (a: { w: (x: T) => U; r: () => T;}, b: T) => U >a : { w: (x: T) => U; r: () => T; } >w : (x: T) => U >x : T diff --git a/tests/baselines/reference/typeLiteralCallback.types b/tests/baselines/reference/typeLiteralCallback.types index 96ec8f2ee1769..c9a6ca48a5cd9 100644 --- a/tests/baselines/reference/typeLiteralCallback.types +++ b/tests/baselines/reference/typeLiteralCallback.types @@ -16,7 +16,7 @@ interface bar { >arg : T fail2(func: { (arg: T): void ; }): void ; ->fail2 : (func: (arg: T) => void) => void +>fail2 : (func: { (arg: T): void;}) => void >func : (arg: T) => void >arg : T } diff --git a/tests/baselines/reference/typeMatch1.types b/tests/baselines/reference/typeMatch1.types index a899fa691582b..95f2d2f923dda 100644 --- a/tests/baselines/reference/typeMatch1.types +++ b/tests/baselines/reference/typeMatch1.types @@ -16,7 +16,7 @@ var x1: { z: number; f(n: number): string; f(s: string): number; } >s : string var x2: { z:number;f:{(n:number):string;(s:string):number;}; } = x1; ->x2 : { z: number; f: { (n: number): string; (s: string): number; }; } +>x2 : { z: number; f: { (n: number): string; (s: string): number;}; } >z : number >f : { (n: number): string; (s: string): number; } >n : number diff --git a/tests/baselines/reference/typeName1.types b/tests/baselines/reference/typeName1.types index 9f4686cd59072..34fe54eca2e5f 100644 --- a/tests/baselines/reference/typeName1.types +++ b/tests/baselines/reference/typeName1.types @@ -60,7 +60,7 @@ var x5:{ (s:string):number;(n:number):string;x;y;z:number;f(n:number):string;f(s >3 : 3 var x6:{ z:number;f:{(n:number):string;(s:string):number;}; }=3; ->x6 : { z: number; f: { (n: number): string; (s: string): number; }; } +>x6 : { z: number; f: { (n: number): string; (s: string): number;}; } >z : number >f : { (n: number): string; (s: string): number; } >n : number @@ -98,7 +98,7 @@ var x11:{z:I;x:boolean;}[][]=3; >3 : 3 var x12:{z:I;x:boolean;y:(s:string)=>boolean;w:{ z:I;[s:string]:{ x; y; };[n:number]:{x; y;};():boolean; };}[][]=3; ->x12 : { z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; }; }[][] +>x12 : { z: I; x: boolean; y: (s: string) => boolean; w: { z: I; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; (): boolean;}; }[][] >z : I >x : boolean >y : (s: string) => boolean diff --git a/tests/baselines/reference/typeParameterConstModifiersWithIntersection.types b/tests/baselines/reference/typeParameterConstModifiersWithIntersection.types index ac817e3200422..6f5e3b436f7b9 100644 --- a/tests/baselines/reference/typeParameterConstModifiersWithIntersection.types +++ b/tests/baselines/reference/typeParameterConstModifiersWithIntersection.types @@ -22,10 +22,10 @@ declare function test< >produceThing : T1 const result = test({ ->result : { readonly produceThing: { type: "foo"; }; readonly useIt: { readonly type: "foo"; }; readonly extra: 10; } ->test({ produceThing: {} as { type: "foo"; }, useIt: { type: "foo", }, extra: 10,}) : { readonly produceThing: { type: "foo"; }; readonly useIt: { readonly type: "foo"; }; readonly extra: 10; } +>result : { readonly produceThing: { type: "foo";}; readonly useIt: { readonly type: "foo"; }; readonly extra: 10; } +>test({ produceThing: {} as { type: "foo"; }, useIt: { type: "foo", }, extra: 10,}) : { readonly produceThing: { type: "foo";}; readonly useIt: { readonly type: "foo"; }; readonly extra: 10; } >test : >(config: { produceThing: T1; } & TConfig) => TConfig ->{ produceThing: {} as { type: "foo"; }, useIt: { type: "foo", }, extra: 10,} : { produceThing: { type: "foo"; }; useIt: { type: "foo"; }; extra: 10; } +>{ produceThing: {} as { type: "foo"; }, useIt: { type: "foo", }, extra: 10,} : { produceThing: { type: "foo";}; useIt: { type: "foo"; }; extra: 10; } produceThing: {} as { >produceThing : { type: "foo"; } diff --git a/tests/baselines/reference/typeVariableConstraintIntersections.types b/tests/baselines/reference/typeVariableConstraintIntersections.types index 6d89a64f8a0b8..1717c85c3048b 100644 --- a/tests/baselines/reference/typeVariableConstraintIntersections.types +++ b/tests/baselines/reference/typeVariableConstraintIntersections.types @@ -233,7 +233,7 @@ const optionHandlers: OptionHandlers = { }; function handleOption(option: Options & { kind: K }): string { ->handleOption : (option: Options & { kind: K; }) => string +>handleOption : (option: Options & { kind: K;}) => string >option : Options & { kind: K; } >kind : K diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.1.types b/tests/baselines/reference/types.asyncGenerators.es2018.1.types index 1dab8448cf487..ad815ffa21462 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.1.types +++ b/tests/baselines/reference/types.asyncGenerators.es2018.1.types @@ -433,7 +433,7 @@ async function * awaitedType2() { >1 : 1 } async function * nextType1(): { next(...args: [] | [number | PromiseLike]): any } { ->nextType1 : () => { next(...args: [] | [number | PromiseLike]): any; } +>nextType1 : () => { next(...args: [] | [number | PromiseLike]): any;} >next : (...args: [] | [number | PromiseLike]) => any >args : [] | [number | PromiseLike] diff --git a/tests/baselines/reference/unicodeEscapesInJsxtags.types b/tests/baselines/reference/unicodeEscapesInJsxtags.types index e8439dc05b388..2a835986a6f9f 100644 --- a/tests/baselines/reference/unicodeEscapesInJsxtags.types +++ b/tests/baselines/reference/unicodeEscapesInJsxtags.types @@ -18,8 +18,8 @@ declare global { } } const Compa = (x: {x: number}) =>
{"" + x}
; ->Compa : (x: { x: number; }) => JSX.Element ->(x: {x: number}) =>
{"" + x}
: (x: { x: number; }) => JSX.Element +>Compa : (x: { x: number;}) => JSX.Element +>(x: {x: number}) =>
{"" + x}
: (x: { x: number;}) => JSX.Element >x : { x: number; } >x : number >
{"" + x}
: JSX.Element diff --git a/tests/baselines/reference/unionReductionMutualSubtypes.types b/tests/baselines/reference/unionReductionMutualSubtypes.types index 2307384f878a1..dba96258452ae 100644 --- a/tests/baselines/reference/unionReductionMutualSubtypes.types +++ b/tests/baselines/reference/unionReductionMutualSubtypes.types @@ -17,7 +17,7 @@ declare const val: ReturnVal; >val : ReturnVal function run(options: { something?(b?: string): void }) { ->run : (options: { something?(b?: string): void; }) => void +>run : (options: { something?(b?: string): void;}) => void >options : { something?(b?: string): void; } >something : ((b?: string) => void) | undefined >b : string | undefined diff --git a/tests/baselines/reference/unionSignaturesWithThisParameter.types b/tests/baselines/reference/unionSignaturesWithThisParameter.types index da59997272e51..0debb675309a8 100644 --- a/tests/baselines/reference/unionSignaturesWithThisParameter.types +++ b/tests/baselines/reference/unionSignaturesWithThisParameter.types @@ -4,7 +4,7 @@ // Repro from #20802 function x(ctor: { ->x : (ctor: { (this: {}, v: T): void; new (v: T): void; } | { (v: T): void; new (v: T): void; }, t: T) => void +>x : (ctor: { (this: {}, v: T): void; new (v: T): void;} | { (v: T): void; new (v: T): void;}, t: T) => void >ctor : { (this: {}, v: T): void; new (v: T): void; } | { (v: T): void; new (v: T): void; } (this: {}, v: T): void; diff --git a/tests/baselines/reference/unionTypeReduction2.types b/tests/baselines/reference/unionTypeReduction2.types index 269b8f5ca6faa..cbd4e779044c9 100644 --- a/tests/baselines/reference/unionTypeReduction2.types +++ b/tests/baselines/reference/unionTypeReduction2.types @@ -2,7 +2,7 @@ === unionTypeReduction2.ts === function f1(x: { f(): void }, y: { f(x?: string): void }) { ->f1 : (x: { f(): void;}, y: { f(x?: string): void; }) => void +>f1 : (x: { f(): void;}, y: { f(x?: string): void;}) => void >x : { f(): void; } >f : () => void >y : { f(x?: string): void; } @@ -33,7 +33,7 @@ function f1(x: { f(): void }, y: { f(x?: string): void }) { } function f2(x: { f(x: string | undefined): void }, y: { f(x?: string): void }) { ->f2 : (x: { f(x: string | undefined): void; }, y: { f(x?: string): void; }) => void +>f2 : (x: { f(x: string | undefined): void;}, y: { f(x?: string): void;}) => void >x : { f(x: string | undefined): void; } >f : (x: string | undefined) => void >x : string | undefined @@ -229,7 +229,7 @@ declare const val: ReturnVal; >val : ReturnVal function run(options: { something?(b?: string): void }) { ->run : (options: { something?(b?: string): void; }) => void +>run : (options: { something?(b?: string): void;}) => void >options : { something?(b?: string): void; } >something : ((b?: string) => void) | undefined >b : string | undefined diff --git a/tests/baselines/reference/uniqueSymbols.types b/tests/baselines/reference/uniqueSymbols.types index 2733ed076ca87..10f462af87b6a 100644 --- a/tests/baselines/reference/uniqueSymbols.types +++ b/tests/baselines/reference/uniqueSymbols.types @@ -912,7 +912,7 @@ const ce0 = class { }; function funcInferredReturnType(obj: { method(p: typeof s): void }) { ->funcInferredReturnType : (obj: { method(p: typeof s): void; }) => { method(p: typeof s): void; } +>funcInferredReturnType : (obj: { method(p: typeof s): void;}) => { method(p: typeof s): void; } >obj : { method(p: typeof s): void; } >method : (p: typeof s) => void >p : unique symbol diff --git a/tests/baselines/reference/uniqueSymbolsDeclarationsErrors.types b/tests/baselines/reference/uniqueSymbolsDeclarationsErrors.types index 90d461473f4cc..defd18906b902 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarationsErrors.types +++ b/tests/baselines/reference/uniqueSymbolsDeclarationsErrors.types @@ -55,7 +55,7 @@ export const classExpression = class { }; export function funcInferredReturnType(obj: { method(p: typeof s): void }) { ->funcInferredReturnType : (obj: { method(p: typeof s): void; }) => { method(p: typeof s): void; } +>funcInferredReturnType : (obj: { method(p: typeof s): void;}) => { method(p: typeof s): void; } >obj : { method(p: typeof s): void; } >method : (p: typeof s) => void >p : unique symbol diff --git a/tests/baselines/reference/unknownType1.types b/tests/baselines/reference/unknownType1.types index b929a29d5fdd6..e3b30a8316194 100644 --- a/tests/baselines/reference/unknownType1.types +++ b/tests/baselines/reference/unknownType1.types @@ -342,7 +342,7 @@ function f23(x: T) { // Anything fresh but primitive assignable to { [x: string]: unknown } function f24(x: { [x: string]: unknown }) { ->f24 : (x: { [x: string]: unknown; }) => void +>f24 : (x: { [x: string]: unknown;}) => void >x : { [x: string]: unknown; } >x : string diff --git a/tests/baselines/reference/varArgsOnConstructorTypes.types b/tests/baselines/reference/varArgsOnConstructorTypes.types index a23c91dab25cc..71e463d404bd7 100644 --- a/tests/baselines/reference/varArgsOnConstructorTypes.types +++ b/tests/baselines/reference/varArgsOnConstructorTypes.types @@ -50,7 +50,7 @@ export interface I1 { >params : any[] register(inputClass: { new (...params: any[]): A; }[]); ->register : { (inputClass: new (...params: any[]) => A): any; (inputClass: (new (...params: any[]) => A)[]): any; } +>register : { (inputClass: new (...params: any[]) => A): any; (inputClass: { new (...params: any[]): A;}[]): any; } >inputClass : (new (...params: any[]) => A)[] >params : any[] } diff --git a/tests/baselines/reference/variableDeclaratorResolvedDuringContextualTyping.types b/tests/baselines/reference/variableDeclaratorResolvedDuringContextualTyping.types index fcb1942c1b5f7..a97d88e44e0b1 100644 --- a/tests/baselines/reference/variableDeclaratorResolvedDuringContextualTyping.types +++ b/tests/baselines/reference/variableDeclaratorResolvedDuringContextualTyping.types @@ -39,7 +39,7 @@ module WinJS { >value : any static join(promises: { [name: string]: Promise; }): Promise; ->join : { (promises: { [name: string]: Promise; }): Promise; (promises: Promise[]): Promise; } +>join : { (promises: { [name: string]: Promise;}): Promise; (promises: Promise[]): Promise; } >promises : { [name: string]: Promise; } >name : string diff --git a/tests/baselines/reference/verbatim-declarations-parameters.js b/tests/baselines/reference/verbatim-declarations-parameters.js index f925ff5ab6357..b350f85f37464 100644 --- a/tests/baselines/reference/verbatim-declarations-parameters.js +++ b/tests/baselines/reference/verbatim-declarations-parameters.js @@ -61,14 +61,8 @@ type MapOrUndefined = Map | undefined | "dummy"; export declare class Foo { reuseTypeNode?: Map | undefined; reuseTypeNode2?: Exclude; - resolveType?: { - [x: string]: any; - } | undefined; - constructor(reuseTypeNode?: Map | undefined, reuseTypeNode2?: Exclude, resolveType?: { - [x: string]: any; - } | undefined); + resolveType?: Map | undefined; + constructor(reuseTypeNode?: Map | undefined, reuseTypeNode2?: Exclude, resolveType?: Map | undefined); } -export declare function foo1(reuseTypeNode: Map | undefined, reuseTypeNode2: Exclude, resolveType: { - [x: string]: any; -} | undefined, requiredParam: number): void; +export declare function foo1(reuseTypeNode: Map | undefined, reuseTypeNode2: Exclude, resolveType: Map | undefined, requiredParam: number): void; export {}; diff --git a/tests/baselines/reference/verbatim-declarations-parameters.types b/tests/baselines/reference/verbatim-declarations-parameters.types index c22a7281300e3..cb1fa89076fcb 100644 --- a/tests/baselines/reference/verbatim-declarations-parameters.types +++ b/tests/baselines/reference/verbatim-declarations-parameters.types @@ -26,7 +26,7 @@ export class Foo { } export function foo1( ->foo1 : (reuseTypeNode: Map | undefined, reuseTypeNode2: Exclude, resolveType: { [x: string]: any; } | undefined, requiredParam: number) => void +>foo1 : (reuseTypeNode: Map | undefined, reuseTypeNode2: Exclude, resolveType: Map | undefined, requiredParam: number) => void // Type node is accurate, preserve reuseTypeNode: Map | undefined = {}, diff --git a/tests/cases/compiler/declarationEmitCastReusesTypeNode1.ts b/tests/cases/compiler/declarationEmitCastReusesTypeNode1.ts new file mode 100644 index 0000000000000..d86b0fe9ded61 --- /dev/null +++ b/tests/cases/compiler/declarationEmitCastReusesTypeNode1.ts @@ -0,0 +1,31 @@ +// @strict: true +// @strictNullChecks: true,false +// @declaration: true +// @noTypesAndSymbols: true +// @emitDeclarationOnly: true +type P = { } & { name: string } + +export let vLet = null! as P +export const vConst = null! as P + +export function fn(p = null! as P) {} + +export function fnWithRequiredDefaultParam(p = null! as P, req: number) {} + +export class C { + field = null! as P; + optField? = null! as P; + readonly roFiled = null! as P; + method(p = null! as P) {} + methodWithRequiredDefault(p = null! as P, req: number) {} + + constructor(public ctorField = null! as P) {} + + get x() { return null! as P } + set x(v) { } +} + +export default null! as P; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P = null! as P, b: number) {} \ No newline at end of file diff --git a/tests/cases/compiler/declarationEmitCastReusesTypeNode2.ts b/tests/cases/compiler/declarationEmitCastReusesTypeNode2.ts new file mode 100644 index 0000000000000..fe905a8cd4393 --- /dev/null +++ b/tests/cases/compiler/declarationEmitCastReusesTypeNode2.ts @@ -0,0 +1,29 @@ +// @strict: true +// @strictNullChecks: true,false +// @declaration: true +// @noTypesAndSymbols: true +// @emitDeclarationOnly: true +export let vLet = null! as {} & { name: string } +export const vConst = null! as {} & { name: string } + +export function fn(p = null! as {} & { name: string }) {} + +export function fnWithRequiredDefaultParam(p = null! as {} & { name: string }, req: number) {} + +export class C { + field = null! as {} & { name: string }; + optField? = null! as {} & { name: string }; + readonly roFiled = null! as {} & { name: string }; + method(p = null! as {} & { name: string }) {} + methodWithRequiredDefault(p = null! as {} & { name: string }, req: number) {} + + constructor(public ctorField = null! as {} & { name: string }) {} + + get x() { return null! as {} & { name: string } } + set x(v) { } +} + +export default null! as {} & { name: string } + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: {} & { name: string } = null! as {} & { name: string }, b: number) {} \ No newline at end of file diff --git a/tests/cases/compiler/declarationEmitCastReusesTypeNode3.ts b/tests/cases/compiler/declarationEmitCastReusesTypeNode3.ts new file mode 100644 index 0000000000000..f39b0d8e8b5b8 --- /dev/null +++ b/tests/cases/compiler/declarationEmitCastReusesTypeNode3.ts @@ -0,0 +1,31 @@ +// @strict: true +// @strictNullChecks: true,false +// @declaration: true +// @noTypesAndSymbols: true +// @emitDeclarationOnly: true +type P = { } & { name: string } + +export let vLet =

null! +export const vConst =

null! + +export function fn(p =

null!) {} + +export function fnWithRequiredDefaultParam(p =

null!, req: number) {} + +export class C { + field =

null! + optField? =

null! + readonly roFiled =

null!; + method(p =

null!) {} + methodWithRequiredDefault(p =

null!, req: number) {} + + constructor(public ctorField =

null!) {} + + get x() { return

null! } + set x(v) { } +} + +export default

null!; + +// allows `undefined` on the input side, thanks to the initializer +export function fnWithPartialAnnotationOnDefaultparam(x: P =

null!, b: number) {} \ No newline at end of file diff --git a/tests/cases/compiler/declarationEmitCastReusesTypeNode4.ts b/tests/cases/compiler/declarationEmitCastReusesTypeNode4.ts new file mode 100644 index 0000000000000..6bd56c584af42 --- /dev/null +++ b/tests/cases/compiler/declarationEmitCastReusesTypeNode4.ts @@ -0,0 +1,45 @@ +// @strict: true +// @strictNullChecks: true,false +// @allowJs: true +// @checkJs: true +// @emitDeclarationOnly: true +// @declaration: true +// @noTypesAndSymbols: true +// @filename: input.js +/** + * @typedef {{ } & { name?: string }} P + */ + +const something = /** @type {*} */(null); + +export let vLet = /** @type {P} */(something); +export const vConst = /** @type {P} */(something); + +export function fn(p = /** @type {P} */(something)) {} + +/** @param {number} req */ +export function fnWithRequiredDefaultParam(p = /** @type {P} */(something), req) {} + +export class C { + field = /** @type {P} */(something); + /** @optional */ optField = /** @type {P} */(something); // not a thing + /** @readonly */ roFiled = /** @type {P} */(something); + method(p = /** @type {P} */(something)) {} + /** @param {number} req */ + methodWithRequiredDefault(p = /** @type {P} */(something), req) {} + + constructor(ctorField = /** @type {P} */(something)) {} + + get x() { return /** @type {P} */(something) } + set x(v) { } +} + +export default /** @type {P} */(something); + +// allows `undefined` on the input side, thanks to the initializer +/** + * + * @param {P} x + * @param {number} b + */ +export function fnWithPartialAnnotationOnDefaultparam(x = /** @type {P} */(something), b) {} \ No newline at end of file diff --git a/tests/cases/compiler/declarationEmitCastReusesTypeNode5.ts b/tests/cases/compiler/declarationEmitCastReusesTypeNode5.ts new file mode 100644 index 0000000000000..4429b72fb003f --- /dev/null +++ b/tests/cases/compiler/declarationEmitCastReusesTypeNode5.ts @@ -0,0 +1,28 @@ +// @strict: true +// @strictNullChecks: true,false +// @declaration: true +// @noTypesAndSymbols: true +// @emitDeclarationOnly: true +export const vNumberLiteral = null! as 1 | 1 +export const vStringLiteral = null! as "1" | "1" +export const vLiteral = null! as "1" | "1" + +type R = { foo: string } + +export class C { + // under !strictNullChecks all types can be reused from the assertion + // under strictNullChecks we need to add undefined, and we can't always know we can + // Can't know if references contain undefined, fall back to inference + tsResolve? = null! as R | R; + tsResolve2? = null! as R | R | string; + // Simple type. we can add undefined + reuseType? = null! as ((p: R) => void) | string | string; + reuseType2? = null! as (new (p: R) => R) | string | string; + reuseType3? = null! as string | number | bigint | symbol | unknown | any | never | symbol; + reuseType4? = null! as [R, R, R] | [R, R, R]; + reuseType5? = null! as R[] | R[]; + reuseType6? = null! as 1 | "2" | 1n | 1n; + reuseType7? = null! as `A` | `A`; + reuseType8? = null! as `${string}-ok` | `${string}-ok`; + reuseType9? = null! as this | this; +} \ No newline at end of file diff --git a/tests/cases/fourslash/objectLiteralCallSignatures.ts b/tests/cases/fourslash/objectLiteralCallSignatures.ts index 3c6d30ae7e458..3749d26fb4e62 100644 --- a/tests/cases/fourslash/objectLiteralCallSignatures.ts +++ b/tests/cases/fourslash/objectLiteralCallSignatures.ts @@ -22,6 +22,6 @@ verify.not.errorExistsAfterMarker('1'); verify.quickInfos({ - 1: "var x: {\n func1(x: number): number;\n func2: (x: number) => number;\n func3: (x: number) => number;\n}", + 1: "var x: {\n func1(x: number): number;\n func2: (x: number) => number;\n func3: {\n (x: number): number;\n };\n}", 2: "var y: {\n func4(x: number): number;\n func4(s: string): string;\n func5: {\n (x: number): number;\n (s: string): string;\n };\n}" });