diff --git a/package.json b/package.json index afbad7c229d..2a3882162d1 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,10 @@ "fs": false, "os": false, "path": false, - "@microsoft/typescript-etw": false + "crypto": false, + "buffer": false, + "@microsoft/typescript-etw": false, + "source-map-support": false }, "dependencies": {} } diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 611e7b4b983..3bc03cdbab9 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1827,7 +1827,23 @@ namespace ts { bindPotentiallyMissingNamespaces(file.symbol, declName.parent, isTopLevel, !!findAncestor(declName, d => isPropertyAccessExpression(d) && d.name.escapedText === "prototype"), /*containerIsClass*/ false); const oldContainer = container; - container = isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression; + switch (getAssignmentDeclarationPropertyAccessKind(declName.parent)) { + case AssignmentDeclarationKind.ExportsProperty: + case AssignmentDeclarationKind.ModuleExports: + container = file; + break; + case AssignmentDeclarationKind.ThisProperty: + container = declName.parent.expression; + break; + case AssignmentDeclarationKind.PrototypeProperty: + container = (declName.parent.expression as PropertyAccessExpression).name; + break; + case AssignmentDeclarationKind.Property: + container = isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression; + break; + case AssignmentDeclarationKind.None: + return Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration"); + } declareModuleMember(typeAlias, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); container = oldContainer; } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fb6761f43d4..8a5b4f1038f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12882,7 +12882,7 @@ namespace ts { // and we need to handle "each" relations before "some" relations for the same kind of type. if (source.flags & TypeFlags.Union) { result = relation === comparableRelation ? - someTypeRelatedToType(source as UnionType, target, reportErrors && !(source.flags & TypeFlags.Primitive)) : + someTypeRelatedToType(source as UnionType, target, reportErrors && !(source.flags & TypeFlags.Primitive), isIntersectionConstituent) : eachTypeRelatedToType(source as UnionType, target, reportErrors && !(source.flags & TypeFlags.Primitive)); } else { @@ -12920,7 +12920,7 @@ namespace ts { // // - For a primitive type or type parameter (such as 'number = A & B') there is no point in // breaking the intersection apart. - result = someTypeRelatedToType(source, target, /*reportErrors*/ false); + result = someTypeRelatedToType(source, target, /*reportErrors*/ false, /*isIntersectionConstituent*/ true); } if (!result && (source.flags & TypeFlags.StructuredOrInstantiable || target.flags & TypeFlags.StructuredOrInstantiable)) { if (result = recursiveTypeRelatedTo(source, target, reportErrors, isIntersectionConstituent)) { @@ -13199,14 +13199,14 @@ namespace ts { return result; } - function someTypeRelatedToType(source: UnionOrIntersectionType, target: Type, reportErrors: boolean): Ternary { + function someTypeRelatedToType(source: UnionOrIntersectionType, target: Type, reportErrors: boolean, isIntersectionConstituent: boolean): Ternary { const sourceTypes = source.types; if (source.flags & TypeFlags.Union && containsType(sourceTypes, target)) { return Ternary.True; } const len = sourceTypes.length; for (let i = 0; i < len; i++) { - const related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1); + const related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1, /*headMessage*/ undefined, isIntersectionConstituent); if (related) { return related; } @@ -14546,6 +14546,9 @@ namespace ts { // though highly unlikely, for this test to be true in a situation where a chain of instantiations is not infinitely // expanding. Effectively, we will generate a false positive when two types are structurally equal to at least 5 // levels, but unequal at some level beyond that. + // In addition, this will also detect when an indexed access has been chained off of 5 or more times (which is essentially + // the dual of the structural comparison), and likewise mark the type as deeply nested, potentially adding false positives + // for finite but deeply expanding indexed accesses (eg, for `Q[P1][P2][P3][P4][P5]`). function isDeeplyNestedType(type: Type, stack: Type[], depth: number): boolean { // We track all object types that have an associated symbol (representing the origin of the type) if (depth >= 5 && type.flags & TypeFlags.Object) { @@ -14561,9 +14564,31 @@ namespace ts { } } } + if (depth >= 5 && type.flags & TypeFlags.IndexedAccess) { + const root = getRootObjectTypeFromIndexedAccessChain(type); + let count = 0; + for (let i = 0; i < depth; i++) { + const t = stack[i]; + if (getRootObjectTypeFromIndexedAccessChain(t) === root) { + count++; + if (count >= 5) return true; + } + } + } return false; } + /** + * Gets the leftmost object type in a chain of indexed accesses, eg, in A[P][Q], returns A + */ + function getRootObjectTypeFromIndexedAccessChain(type: Type) { + let t = type; + while (t.flags & TypeFlags.IndexedAccess) { + t = (t as IndexedAccessType).objectType; + } + return t; + } + function isPropertyIdenticalTo(sourceProp: Symbol, targetProp: Symbol): boolean { return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== Ternary.False; } @@ -15584,11 +15609,14 @@ namespace ts { if (inferFromMatchingType(source, (target).types, isTypeCloselyMatchedBy)) return; } } - else if (target.flags & TypeFlags.Intersection && some((target).types, t => !!getInferenceInfoForType(t))) { + else if (target.flags & TypeFlags.Intersection && some((target).types, + t => !!getInferenceInfoForType(t) || (isGenericMappedType(t) && !!getInferenceInfoForType(getHomomorphicTypeVariable(t) || neverType)))) { // We reduce intersection types only when they contain naked type parameters. For example, when // inferring from 'string[] & { extra: any }' to 'string[] & T' we want to remove string[] and // infer { extra: any } for T. But when inferring to 'string[] & Iterable' we want to keep the // string[] on the source side and infer string for T. + // Likewise, we consider a homomorphic mapped type constrainted to the target type parameter as similar to a "naked type variable" + // in such scenarios. if (source.flags & TypeFlags.Intersection) { // Infer between identically matching source and target constituents and remove the matching types. const [sources, targets] = inferFromMatchingTypes((source).types, (target).types, isTypeIdenticalTo); @@ -21574,13 +21602,13 @@ namespace ts { checkMode: CheckMode, reportErrors: boolean, containingMessageChain: (() => DiagnosticMessageChain | undefined) | undefined, - ) { + ): ReadonlyArray | undefined { const errorOutputContainer: { errors?: Diagnostic[], skipLogging?: boolean } = { errors: undefined, skipLogging: true }; if (isJsxOpeningLikeElement(node)) { if (!checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation, checkMode, reportErrors, containingMessageChain, errorOutputContainer)) { Debug.assert(!reportErrors || !!errorOutputContainer.errors, "jsx should have errors when reporting errors"); - return errorOutputContainer.errors || []; + return errorOutputContainer.errors || emptyArray; } return undefined; } @@ -21595,7 +21623,7 @@ namespace ts { const headMessage = Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1; if (!checkTypeRelatedTo(thisArgumentType, thisType, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer)) { Debug.assert(!reportErrors || !!errorOutputContainer.errors, "this parameter should have errors when reporting errors"); - return errorOutputContainer.errors || []; + return errorOutputContainer.errors || emptyArray; } } const headMessage = Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1; @@ -21613,7 +21641,7 @@ namespace ts { if (!checkTypeRelatedToAndOptionallyElaborate(checkArgType, paramType, relation, reportErrors ? arg : undefined, arg, headMessage, containingMessageChain, errorOutputContainer)) { Debug.assert(!reportErrors || !!errorOutputContainer.errors, "parameter should have errors when reporting errors"); maybeAddMissingAwaitInfo(arg, checkArgType, paramType); - return errorOutputContainer.errors || []; + return errorOutputContainer.errors || emptyArray; } } } @@ -21623,7 +21651,7 @@ namespace ts { if (!checkTypeRelatedTo(spreadType, restType, relation, errorNode, headMessage, /*containingMessageChain*/ undefined, errorOutputContainer)) { Debug.assert(!reportErrors || !!errorOutputContainer.errors, "rest parameter should have errors when reporting errors"); maybeAddMissingAwaitInfo(errorNode, spreadType, restType); - return errorOutputContainer.errors || []; + return errorOutputContainer.errors || emptyArray; } } return undefined; @@ -22014,7 +22042,7 @@ namespace ts { } } else { - const allDiagnostics: DiagnosticRelatedInformation[][] = []; + const allDiagnostics: (readonly DiagnosticRelatedInformation[])[] = []; let max = 0; let min = Number.MAX_VALUE; let minIndex = 0; diff --git a/src/compiler/perfLogger.ts b/src/compiler/perfLogger.ts index 1e78c190618..5d7b1dae122 100644 --- a/src/compiler/perfLogger.ts +++ b/src/compiler/perfLogger.ts @@ -36,8 +36,8 @@ namespace ts { etwModule = undefined; } - /** Performance logger that will generate ETW events if possible */ - export const perfLogger: PerfLogger = etwModule ? etwModule : nullLogger; - - perfLogger.logInfoEvent(`Starting TypeScript v${versionMajorMinor} with command line: ${JSON.stringify(process.argv)}`); + /** Performance logger that will generate ETW events if possible - check for `logEvent` member, as `etwModule` will be `{}` when browserified */ + export const perfLogger: PerfLogger = etwModule && etwModule.logEvent ? etwModule : nullLogger; + const args = typeof process === "undefined" ? [] : process.argv; + perfLogger.logInfoEvent(`Starting TypeScript v${versionMajorMinor} with command line: ${JSON.stringify(args)}`); } diff --git a/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.js b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.js new file mode 100644 index 00000000000..d509ae136fa --- /dev/null +++ b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.js @@ -0,0 +1,17 @@ +//// [comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts] +type PartialDeep = {[K in keyof T]?: PartialDeep}; +type Many = T | readonly T[]; + +interface Collection { + sortBy(...iteratees: Many>[]): Collection; +} + +const x: Collection<{x: number}> = (null as any as Collection<{x: number, y: number}>); + +export {}; + + +//// [comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.js] +"use strict"; +exports.__esModule = true; +var x = null; diff --git a/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.symbols b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.symbols new file mode 100644 index 00000000000..55e387983e5 --- /dev/null +++ b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.symbols @@ -0,0 +1,40 @@ +=== tests/cases/compiler/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts === +type PartialDeep = {[K in keyof T]?: PartialDeep}; +>PartialDeep : Symbol(PartialDeep, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 0)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 17)) +>K : Symbol(K, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 24)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 17)) +>PartialDeep : Symbol(PartialDeep, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 0)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 17)) +>K : Symbol(K, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 24)) + +type Many = T | readonly T[]; +>Many : Symbol(Many, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 59)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 10)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 10)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 10)) + +interface Collection { +>Collection : Symbol(Collection, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 32)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 3, 21)) + + sortBy(...iteratees: Many>[]): Collection; +>sortBy : Symbol(Collection.sortBy, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 3, 25)) +>iteratees : Symbol(iteratees, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 4, 11)) +>Many : Symbol(Many, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 59)) +>PartialDeep : Symbol(PartialDeep, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 0, 0)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 3, 21)) +>Collection : Symbol(Collection, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 32)) +>T : Symbol(T, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 3, 21)) +} + +const x: Collection<{x: number}> = (null as any as Collection<{x: number, y: number}>); +>x : Symbol(x, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 7, 5)) +>Collection : Symbol(Collection, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 32)) +>x : Symbol(x, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 7, 21)) +>Collection : Symbol(Collection, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 1, 32)) +>x : Symbol(x, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 7, 63)) +>y : Symbol(y, Decl(comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts, 7, 73)) + +export {}; + diff --git a/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.types b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.types new file mode 100644 index 00000000000..edc8e82ee87 --- /dev/null +++ b/tests/baselines/reference/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts === +type PartialDeep = {[K in keyof T]?: PartialDeep}; +>PartialDeep : PartialDeep + +type Many = T | readonly T[]; +>Many : Many + +interface Collection { + sortBy(...iteratees: Many>[]): Collection; +>sortBy : (...iteratees: Many>[]) => Collection +>iteratees : Many>[] +} + +const x: Collection<{x: number}> = (null as any as Collection<{x: number, y: number}>); +>x : Collection<{ x: number; }> +>x : number +>(null as any as Collection<{x: number, y: number}>) : Collection<{ x: number; y: number; }> +>null as any as Collection<{x: number, y: number}> : Collection<{ x: number; y: number; }> +>null as any : any +>null : null +>x : number +>y : number + +export {}; + diff --git a/tests/baselines/reference/docker/azure-sdk.log b/tests/baselines/reference/docker/azure-sdk.log index 6c894a93e3c..ce7e6e724ca 100644 --- a/tests/baselines/reference/docker/azure-sdk.log +++ b/tests/baselines/reference/docker/azure-sdk.log @@ -7,6 +7,7 @@ Starting "rush rebuild" Executing a maximum of ?simultaneous processes... XX of XX: [@azure/abort-controller] completed successfully in ? seconds XX of XX: [@azure/core-auth] completed successfully in ? seconds +XX of XX: [@azure/core-tracing] completed successfully in ? seconds XX of XX: [@azure/core-http] completed successfully in ? seconds XX of XX: [@azure/core-arm] completed successfully in ? seconds XX of XX: [@azure/core-paging] completed successfully in ? seconds @@ -18,12 +19,11 @@ XX of XX: [@azure/keyvault-keys] completed successfully in ? seconds XX of XX: [@azure/keyvault-secrets] completed successfully in ? seconds XX of XX: [@azure/app-configuration] completed successfully in ? seconds XX of XX: [@azure/core-asynciterator-polyfill] completed successfully in ? seconds -XX of XX: [@azure/core-tracing] completed successfully in ? seconds Warning: You have changed the public API signature for this project. Updating review/cosmos.api.md dist-esm/index.js → dist/index.js... (!) Unresolved dependencies https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency -tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js) +tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js) @azure/cosmos-sign (imported by dist-esm/auth.js) universal-user-agent (imported by dist-esm/common/platform.js) uuid/v4 (imported by dist-esm/ClientContext.js, dist-esm/client/Item/Items.js) @@ -67,6 +67,7 @@ SUCCESS (20) ================================ @azure/abort-controller (? seconds) @azure/core-auth (? seconds) +@azure/core-tracing (? seconds) @azure/core-http (? seconds) @azure/core-arm (? seconds) @azure/core-paging (? seconds) @@ -78,7 +79,6 @@ SUCCESS (20) @azure/keyvault-secrets (? seconds) @azure/app-configuration (? seconds) @azure/core-asynciterator-polyfill (? seconds) -@azure/core-tracing (? seconds) @azure/keyvault-certificates (? seconds) @azure/storage-blob (? seconds) @azure/storage-file (? seconds) @@ -93,7 +93,7 @@ Warning: You have changed the public API signature for this project. Updating re dist-esm/index.js → dist/index.js... (!) Unresolved dependencies https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency -tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js) +tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js) @azure/cosmos-sign (imported by dist-esm/auth.js) universal-user-agent (imported by dist-esm/common/platform.js) uuid/v4 (imported by dist-esm/ClientContext.js, dist-esm/client/Item/Items.js) diff --git a/tests/baselines/reference/docker/office-ui-fabric.log b/tests/baselines/reference/docker/office-ui-fabric.log index 96605f33b9d..01858ab7d2a 100644 --- a/tests/baselines/reference/docker/office-ui-fabric.log +++ b/tests/baselines/reference/docker/office-ui-fabric.log @@ -84,6 +84,7 @@ Standard output: @uifabric/merge-styles: PASS src/Stylesheet.test.ts @uifabric/merge-styles: PASS src/extractStyleParts.test.ts @uifabric/merge-styles: PASS src/server.test.ts +@uifabric/merge-styles: PASS src/fontFace.test.ts @uifabric/merge-styles: [XX:XX:XX XM] ■ Extracting Public API surface from '/office-ui-fabric-react/packages/merge-styles/lib/index.d.ts' @uifabric/merge-styles: Done in ?s. @uifabric/jest-serializer-merge-styles: yarn run vX.X.X @@ -179,7 +180,6 @@ Standard output: @uifabric/styling: PASS src/styles/theme.test.ts @uifabric/styling: PASS src/styles/scheme.test.ts @uifabric/styling: PASS src/styles/getGlobalClassNames.test.ts -@uifabric/styling: PASS src/utilities/icons.test.ts @uifabric/styling: [XX:XX:XX XM] ■ Extracting Public API surface from '/office-ui-fabric-react/packages/styling/lib/index.d.ts' @uifabric/styling: Done in ?s. @uifabric/file-type-icons: yarn run vX.X.X @@ -459,7 +459,6 @@ lerna info Executing command in 41 packages: "yarn run build --production --lint @uifabric/foundation: at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12) @uifabric/foundation: [XX:XX:XX XM] x ------------------------------------ @uifabric/foundation: [XX:XX:XX XM] x Error previously detected. See above for error messages. -@uifabric/foundation: [XX:XX:XX XM] x Other tasks that did not complete: [webpack] @uifabric/foundation: error Command failed with exit code 1. lerna ERR! yarn run build --production --lint exited 1 in '@uifabric/foundation' lerna WARN complete Waiting for 1 child process to exit. CTRL-C to exit immediately. diff --git a/tests/baselines/reference/docker/vscode.log b/tests/baselines/reference/docker/vscode.log index 4775203f50e..8bc85ffef12 100644 --- a/tests/baselines/reference/docker/vscode.log +++ b/tests/baselines/reference/docker/vscode.log @@ -1,11 +1,10 @@ -Exit Code: 1 +Exit Code: 0 Standard output: yarn run vX.X.X $ gulp compile --max_old_space_size=4095 [XX:XX:XX] Node flags detected: --max_old_space_size=4095 [XX:XX:XX] Using gulpfile /vscode/gulpfile.js -[XX:XX:XX] Error: /vscode/node_modules/@types/node/index.d.ts(179,11): Duplicate identifier 'IteratorResult'. -info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. +Done in ?s. @@ -13,15 +12,3 @@ Standard error: {"type":"warning","data":"package.json: No license field"} {"type":"warning","data":"../package.json: No license field"} {"type":"warning","data":"vscode-web@X.X.X: No license field"} -[XX:XX:XX] 'compile' errored after ?s -[XX:XX:XX] Error: Found 1 errors - at Stream. (/vscode/build/lib/reporter.js:74:29) - at _end (/vscode/node_modules/through/index.js:65:9) - at Stream.stream.end (/vscode/node_modules/through/index.js:74:5) - at StreamFilter.onend (/vscode/node_modules/readable-stream/lib/_stream_readable.js:570:10) - at Object.onceWrapper (events.js:286:20) - at StreamFilter.emit (events.js:203:15) - at StreamFilter.EventEmitter.emit (domain.js:466:23) - at endReadableNT (/vscode/node_modules/readable-stream/lib/_stream_readable.js:992:12) - at process._tickCallback (internal/process/next_tick.js:63:19) -error Command failed with exit code 1. diff --git a/tests/baselines/reference/enumTagOnExports.symbols b/tests/baselines/reference/enumTagOnExports.symbols new file mode 100644 index 00000000000..89257c00d49 --- /dev/null +++ b/tests/baselines/reference/enumTagOnExports.symbols @@ -0,0 +1,15 @@ +=== tests/cases/conformance/jsdoc/enumTagOnExports.js === +/** @enum {number} */ +exports.a = {}; +>exports.a : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4)) +>exports : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4)) +>a : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4)) + +/** @enum {string} */ +module.exports.b = {}; +>module.exports.b : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4)) +>module.exports : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4)) +>module : Symbol(module, Decl(enumTagOnExports.js, 1, 15)) +>exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0)) +>b : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4)) + diff --git a/tests/baselines/reference/enumTagOnExports.types b/tests/baselines/reference/enumTagOnExports.types new file mode 100644 index 00000000000..853e5ec0904 --- /dev/null +++ b/tests/baselines/reference/enumTagOnExports.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/jsdoc/enumTagOnExports.js === +/** @enum {number} */ +exports.a = {}; +>exports.a = {} : {} +>exports.a : typeof a +>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>a : typeof a +>{} : {} + +/** @enum {string} */ +module.exports.b = {}; +>module.exports.b = {} : {} +>module.exports.b : typeof b +>module.exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>module : { "tests/cases/conformance/jsdoc/enumTagOnExports": typeof import("tests/cases/conformance/jsdoc/enumTagOnExports"); } +>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>b : typeof b +>{} : {} + diff --git a/tests/baselines/reference/enumTagOnExports2.symbols b/tests/baselines/reference/enumTagOnExports2.symbols new file mode 100644 index 00000000000..9bca24fe024 --- /dev/null +++ b/tests/baselines/reference/enumTagOnExports2.symbols @@ -0,0 +1,7 @@ +=== tests/cases/conformance/jsdoc/enumTagOnExports.js === +/** @enum {string} */ +module.exports = {}; +>module.exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0)) +>module : Symbol(module, Decl(enumTagOnExports.js, 0, 0)) +>exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0)) + diff --git a/tests/baselines/reference/enumTagOnExports2.types b/tests/baselines/reference/enumTagOnExports2.types new file mode 100644 index 00000000000..9177307dde7 --- /dev/null +++ b/tests/baselines/reference/enumTagOnExports2.types @@ -0,0 +1,9 @@ +=== tests/cases/conformance/jsdoc/enumTagOnExports.js === +/** @enum {string} */ +module.exports = {}; +>module.exports = {} : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>module.exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>module : { "tests/cases/conformance/jsdoc/enumTagOnExports": typeof import("tests/cases/conformance/jsdoc/enumTagOnExports"); } +>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports") +>{} : {} + diff --git a/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.errors.txt b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.errors.txt new file mode 100644 index 00000000000..09dd54b1b98 --- /dev/null +++ b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.tsx(10,21): error TS2304: Cannot find name 'React'. + + +==== tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.tsx (1 errors) ==== + interface F

{ + (props: P & { children?: boolean }): void; + propTypes: { [K in keyof P]: null extends P ? K : K }; + } + declare function g(C: F): string; + export function wu(CC: F) { + class WU { + m() { + g(CC) + return ; + ~~ +!!! error TS2304: Cannot find name 'React'. + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.js b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.js new file mode 100644 index 00000000000..b6e6cd8a1d0 --- /dev/null +++ b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.js @@ -0,0 +1,42 @@ +//// [quickIntersectionCheckCorrectlyCachesErrors.tsx] +interface F

{ + (props: P & { children?: boolean }): void; + propTypes: { [K in keyof P]: null extends P ? K : K }; +} +declare function g(C: F): string; +export function wu(CC: F) { + class WU { + m() { + g(CC) + return ; + } + } +} + + +//// [quickIntersectionCheckCorrectlyCachesErrors.js] +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; +function wu(CC) { + var WU = /** @class */ (function () { + function WU() { + } + WU.prototype.m = function () { + g(CC); + return React.createElement(CC, __assign({}, null)); + }; + return WU; + }()); +} +exports.wu = wu; diff --git a/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.symbols b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.symbols new file mode 100644 index 00000000000..d7122542884 --- /dev/null +++ b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.symbols @@ -0,0 +1,48 @@ +=== tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.tsx === +interface F

{ +>F : Symbol(F, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 0)) +>P : Symbol(P, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 12)) + + (props: P & { children?: boolean }): void; +>props : Symbol(props, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 1, 5)) +>P : Symbol(P, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 12)) +>children : Symbol(children, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 1, 17)) + + propTypes: { [K in keyof P]: null extends P ? K : K }; +>propTypes : Symbol(F.propTypes, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 1, 46)) +>K : Symbol(K, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 2, 18)) +>P : Symbol(P, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 12)) +>P : Symbol(P, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 12)) +>K : Symbol(K, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 2, 18)) +>K : Symbol(K, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 2, 18)) +} +declare function g(C: F): string; +>g : Symbol(g, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 3, 1)) +>C : Symbol(C, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 4, 19)) +>F : Symbol(F, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 0)) + +export function wu(CC: F) { +>wu : Symbol(wu, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 4, 42)) +>CP : Symbol(CP, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 19)) +>o : Symbol(o, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 31)) +>CC : Symbol(CC, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 45)) +>F : Symbol(F, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 0, 0)) +>CP : Symbol(CP, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 19)) + + class WU { +>WU : Symbol(WU, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 57)) + + m() { +>m : Symbol(WU.m, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 6, 14)) + + g(CC) +>g : Symbol(g, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 3, 1)) +>CC : Symbol(CC, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 45)) + + return ; +>CC : Symbol(CC, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 45)) +>CP : Symbol(CP, Decl(quickIntersectionCheckCorrectlyCachesErrors.tsx, 5, 19)) + } + } +} + diff --git a/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.types b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.types new file mode 100644 index 00000000000..04153e6e1df --- /dev/null +++ b/tests/baselines/reference/quickIntersectionCheckCorrectlyCachesErrors.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.tsx === +interface F

{ + (props: P & { children?: boolean }): void; +>props : P & { children?: boolean; } +>children : boolean + + propTypes: { [K in keyof P]: null extends P ? K : K }; +>propTypes : { [K in keyof P]: null extends P ? K : K; } +>null : null +} +declare function g(C: F): string; +>g : (C: F) => string +>C : F + +export function wu(CC: F) { +>wu : (CC: F) => void +>o : object +>CC : F + + class WU { +>WU : WU + + m() { +>m : () => any + + g(CC) +>g(CC) : string +>g : (C: F) => string +>CC : F + + return ; +> : any +>CC : F +>(null as unknown as CP) : CP +>null as unknown as CP : CP +>null as unknown : unknown +>null : null + } + } +} + diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference.js b/tests/baselines/reference/vueLikeDataAndPropsInference.js new file mode 100644 index 00000000000..805bda224e9 --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference.js @@ -0,0 +1,63 @@ +//// [vueLikeDataAndPropsInference.ts] +interface Instance { + _instanceBrand: never +} + +type DataDef = (this: Readonly & Instance) => Data + +type PropsDefinition = { + [K in keyof T]: T[K] +} + +interface Options< + Data = ((this: Instance) => object), + PropsDef = {} + > { + data?: Data + props?: PropsDef + watch?: Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; + +type ThisTypedOptions = + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +declare function test(fn: Options): void; + +test({ + props: { + foo: '' + }, + + data(): { bar: boolean } { + return { + bar: true + } + }, + + watch: { + foo(newVal: string, oldVal: string): void { + this.bar = false + } + } +}) + +//// [vueLikeDataAndPropsInference.js] +test({ + props: { + foo: '' + }, + data: function () { + return { + bar: true + }; + }, + watch: { + foo: function (newVal, oldVal) { + this.bar = false; + } + } +}); diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference.symbols b/tests/baselines/reference/vueLikeDataAndPropsInference.symbols new file mode 100644 index 00000000000..73ca11cf792 --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference.symbols @@ -0,0 +1,130 @@ +=== tests/cases/compiler/vueLikeDataAndPropsInference.ts === +interface Instance { +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference.ts, 0, 0)) + + _instanceBrand: never +>_instanceBrand : Symbol(Instance._instanceBrand, Decl(vueLikeDataAndPropsInference.ts, 0, 20)) +} + +type DataDef = (this: Readonly & Instance) => Data +>DataDef : Symbol(DataDef, Decl(vueLikeDataAndPropsInference.ts, 2, 1)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 4, 13)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 4, 18)) +>this : Symbol(this, Decl(vueLikeDataAndPropsInference.ts, 4, 29)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 4, 18)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference.ts, 0, 0)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 4, 13)) + +type PropsDefinition = { +>PropsDefinition : Symbol(PropsDefinition, Decl(vueLikeDataAndPropsInference.ts, 4, 70)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 6, 21)) + + [K in keyof T]: T[K] +>K : Symbol(K, Decl(vueLikeDataAndPropsInference.ts, 7, 5)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 6, 21)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 6, 21)) +>K : Symbol(K, Decl(vueLikeDataAndPropsInference.ts, 7, 5)) +} + +interface Options< +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference.ts, 8, 1)) + + Data = ((this: Instance) => object), +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 10, 18)) +>this : Symbol(this, Decl(vueLikeDataAndPropsInference.ts, 11, 13)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference.ts, 0, 0)) + + PropsDef = {} +>PropsDef : Symbol(PropsDef, Decl(vueLikeDataAndPropsInference.ts, 11, 40)) + + > { + data?: Data +>data : Symbol(Options.data, Decl(vueLikeDataAndPropsInference.ts, 13, 7)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 10, 18)) + + props?: PropsDef +>props : Symbol(Options.props, Decl(vueLikeDataAndPropsInference.ts, 14, 15)) +>PropsDef : Symbol(PropsDef, Decl(vueLikeDataAndPropsInference.ts, 11, 40)) + + watch?: Record> +>watch : Symbol(Options.watch, Decl(vueLikeDataAndPropsInference.ts, 15, 20)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>WatchHandler : Symbol(WatchHandler, Decl(vueLikeDataAndPropsInference.ts, 17, 1)) +} + +type WatchHandler = (val: T, oldVal: T) => void; +>WatchHandler : Symbol(WatchHandler, Decl(vueLikeDataAndPropsInference.ts, 17, 1)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 19, 18)) +>val : Symbol(val, Decl(vueLikeDataAndPropsInference.ts, 19, 24)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 19, 18)) +>oldVal : Symbol(oldVal, Decl(vueLikeDataAndPropsInference.ts, 19, 31)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference.ts, 19, 18)) + +type ThisTypedOptions = +>ThisTypedOptions : Symbol(ThisTypedOptions, Decl(vueLikeDataAndPropsInference.ts, 19, 51)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 21, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 21, 27)) + + Options, PropsDefinition> & +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference.ts, 8, 1)) +>DataDef : Symbol(DataDef, Decl(vueLikeDataAndPropsInference.ts, 2, 1)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 21, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 21, 27)) +>PropsDefinition : Symbol(PropsDefinition, Decl(vueLikeDataAndPropsInference.ts, 4, 70)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 21, 27)) + + ThisType & Instance> +>ThisType : Symbol(ThisType, Decl(lib.es5.d.ts, --, --)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 21, 22)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 21, 27)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference.ts, 0, 0)) + +declare function test(fn: ThisTypedOptions): void; +>test : Symbol(test, Decl(vueLikeDataAndPropsInference.ts, 23, 47), Decl(vueLikeDataAndPropsInference.ts, 25, 76)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 25, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 25, 27)) +>fn : Symbol(fn, Decl(vueLikeDataAndPropsInference.ts, 25, 35)) +>ThisTypedOptions : Symbol(ThisTypedOptions, Decl(vueLikeDataAndPropsInference.ts, 19, 51)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference.ts, 25, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference.ts, 25, 27)) + +declare function test(fn: Options): void; +>test : Symbol(test, Decl(vueLikeDataAndPropsInference.ts, 23, 47), Decl(vueLikeDataAndPropsInference.ts, 25, 76)) +>fn : Symbol(fn, Decl(vueLikeDataAndPropsInference.ts, 26, 22)) +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference.ts, 8, 1)) + +test({ +>test : Symbol(test, Decl(vueLikeDataAndPropsInference.ts, 23, 47), Decl(vueLikeDataAndPropsInference.ts, 25, 76)) + + props: { +>props : Symbol(props, Decl(vueLikeDataAndPropsInference.ts, 28, 6)) + + foo: '' +>foo : Symbol(foo, Decl(vueLikeDataAndPropsInference.ts, 29, 12)) + + }, + + data(): { bar: boolean } { +>data : Symbol(data, Decl(vueLikeDataAndPropsInference.ts, 31, 6)) +>bar : Symbol(bar, Decl(vueLikeDataAndPropsInference.ts, 33, 13)) + + return { + bar: true +>bar : Symbol(bar, Decl(vueLikeDataAndPropsInference.ts, 34, 16)) + } + }, + + watch: { +>watch : Symbol(watch, Decl(vueLikeDataAndPropsInference.ts, 37, 6)) + + foo(newVal: string, oldVal: string): void { +>foo : Symbol(foo, Decl(vueLikeDataAndPropsInference.ts, 39, 12)) +>newVal : Symbol(newVal, Decl(vueLikeDataAndPropsInference.ts, 40, 12)) +>oldVal : Symbol(oldVal, Decl(vueLikeDataAndPropsInference.ts, 40, 27)) + + this.bar = false + } + } +}) diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference.types b/tests/baselines/reference/vueLikeDataAndPropsInference.types new file mode 100644 index 00000000000..13f40a37a78 --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference.types @@ -0,0 +1,97 @@ +=== tests/cases/compiler/vueLikeDataAndPropsInference.ts === +interface Instance { + _instanceBrand: never +>_instanceBrand : never +} + +type DataDef = (this: Readonly & Instance) => Data +>DataDef : DataDef +>this : Readonly & Instance + +type PropsDefinition = { +>PropsDefinition : PropsDefinition + + [K in keyof T]: T[K] +} + +interface Options< + Data = ((this: Instance) => object), +>this : Instance + + PropsDef = {} + > { + data?: Data +>data : Data + + props?: PropsDef +>props : PropsDef + + watch?: Record> +>watch : Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; +>WatchHandler : WatchHandler +>val : T +>oldVal : T + +type ThisTypedOptions = +>ThisTypedOptions : ThisTypedOptions + + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +>test : { (fn: ThisTypedOptions): void; (fn: Options<(this: Instance) => object, {}>): void; } +>fn : ThisTypedOptions + +declare function test(fn: Options): void; +>test : { (fn: ThisTypedOptions): void; (fn: Options<(this: Instance) => object, {}>): void; } +>fn : Options<(this: Instance) => object, {}> + +test({ +>test({ props: { foo: '' }, data(): { bar: boolean } { return { bar: true } }, watch: { foo(newVal: string, oldVal: string): void { this.bar = false } }}) : void +>test : { (fn: ThisTypedOptions): void; (fn: Options<(this: Instance) => object, {}>): void; } +>{ props: { foo: '' }, data(): { bar: boolean } { return { bar: true } }, watch: { foo(newVal: string, oldVal: string): void { this.bar = false } }} : { props: { foo: string; }; data(this: Readonly<{ foo: string; }> & Instance): { bar: boolean; }; watch: { foo(newVal: string, oldVal: string): void; }; } + + props: { +>props : { foo: string; } +>{ foo: '' } : { foo: string; } + + foo: '' +>foo : string +>'' : "" + + }, + + data(): { bar: boolean } { +>data : (this: Readonly<{ foo: string; }> & Instance) => { bar: boolean; } +>bar : boolean + + return { +>{ bar: true } : { bar: true; } + + bar: true +>bar : true +>true : true + } + }, + + watch: { +>watch : { foo(newVal: string, oldVal: string): void; } +>{ foo(newVal: string, oldVal: string): void { this.bar = false } } : { foo(newVal: string, oldVal: string): void; } + + foo(newVal: string, oldVal: string): void { +>foo : (newVal: string, oldVal: string) => void +>newVal : string +>oldVal : string + + this.bar = false +>this.bar = false : false +>this.bar : any +>this : any +>bar : any +>false : false + } + } +}) diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference2.js b/tests/baselines/reference/vueLikeDataAndPropsInference2.js new file mode 100644 index 00000000000..2a203cb437c --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference2.js @@ -0,0 +1,64 @@ +//// [vueLikeDataAndPropsInference2.ts] +interface Instance { + _instanceBrand: never +} + +type DataDef = (this: Readonly & Instance) => Data + +type PropsDefinition = { + [K in keyof T]: T[K] +} + +interface Options< + Data = object | ((this: Instance) => object), + PropsDef = PropsDefinition> + > { + data?: Data + props?: PropsDef + watch?: Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; + +type ThisTypedOptions = + object & + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +declare function test(fn: Options): void; + +test({ + props: { + foo: '' + }, + + data(): { bar: boolean } { + return { + bar: true + } + }, + + watch: { + foo(newVal: string, oldVal: string): void { + this.bar = false + } + } +}) + +//// [vueLikeDataAndPropsInference2.js] +test({ + props: { + foo: '' + }, + data: function () { + return { + bar: true + }; + }, + watch: { + foo: function (newVal, oldVal) { + this.bar = false; + } + } +}); diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference2.symbols b/tests/baselines/reference/vueLikeDataAndPropsInference2.symbols new file mode 100644 index 00000000000..c7d102bbcb9 --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference2.symbols @@ -0,0 +1,133 @@ +=== tests/cases/compiler/vueLikeDataAndPropsInference2.ts === +interface Instance { +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference2.ts, 0, 0)) + + _instanceBrand: never +>_instanceBrand : Symbol(Instance._instanceBrand, Decl(vueLikeDataAndPropsInference2.ts, 0, 20)) +} + +type DataDef = (this: Readonly & Instance) => Data +>DataDef : Symbol(DataDef, Decl(vueLikeDataAndPropsInference2.ts, 2, 1)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 4, 13)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 4, 18)) +>this : Symbol(this, Decl(vueLikeDataAndPropsInference2.ts, 4, 29)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 4, 18)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference2.ts, 0, 0)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 4, 13)) + +type PropsDefinition = { +>PropsDefinition : Symbol(PropsDefinition, Decl(vueLikeDataAndPropsInference2.ts, 4, 70)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 6, 21)) + + [K in keyof T]: T[K] +>K : Symbol(K, Decl(vueLikeDataAndPropsInference2.ts, 7, 5)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 6, 21)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 6, 21)) +>K : Symbol(K, Decl(vueLikeDataAndPropsInference2.ts, 7, 5)) +} + +interface Options< +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference2.ts, 8, 1)) + + Data = object | ((this: Instance) => object), +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 10, 18)) +>this : Symbol(this, Decl(vueLikeDataAndPropsInference2.ts, 11, 22)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference2.ts, 0, 0)) + + PropsDef = PropsDefinition> +>PropsDef : Symbol(PropsDef, Decl(vueLikeDataAndPropsInference2.ts, 11, 49)) +>PropsDefinition : Symbol(PropsDefinition, Decl(vueLikeDataAndPropsInference2.ts, 4, 70)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) + + > { + data?: Data +>data : Symbol(Options.data, Decl(vueLikeDataAndPropsInference2.ts, 13, 7)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 10, 18)) + + props?: PropsDef +>props : Symbol(Options.props, Decl(vueLikeDataAndPropsInference2.ts, 14, 15)) +>PropsDef : Symbol(PropsDef, Decl(vueLikeDataAndPropsInference2.ts, 11, 49)) + + watch?: Record> +>watch : Symbol(Options.watch, Decl(vueLikeDataAndPropsInference2.ts, 15, 20)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>WatchHandler : Symbol(WatchHandler, Decl(vueLikeDataAndPropsInference2.ts, 17, 1)) +} + +type WatchHandler = (val: T, oldVal: T) => void; +>WatchHandler : Symbol(WatchHandler, Decl(vueLikeDataAndPropsInference2.ts, 17, 1)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 19, 18)) +>val : Symbol(val, Decl(vueLikeDataAndPropsInference2.ts, 19, 24)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 19, 18)) +>oldVal : Symbol(oldVal, Decl(vueLikeDataAndPropsInference2.ts, 19, 31)) +>T : Symbol(T, Decl(vueLikeDataAndPropsInference2.ts, 19, 18)) + +type ThisTypedOptions = +>ThisTypedOptions : Symbol(ThisTypedOptions, Decl(vueLikeDataAndPropsInference2.ts, 19, 51)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 21, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 21, 27)) + + object & + Options, PropsDefinition> & +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference2.ts, 8, 1)) +>DataDef : Symbol(DataDef, Decl(vueLikeDataAndPropsInference2.ts, 2, 1)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 21, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 21, 27)) +>PropsDefinition : Symbol(PropsDefinition, Decl(vueLikeDataAndPropsInference2.ts, 4, 70)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 21, 27)) + + ThisType & Instance> +>ThisType : Symbol(ThisType, Decl(lib.es5.d.ts, --, --)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 21, 22)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 21, 27)) +>Instance : Symbol(Instance, Decl(vueLikeDataAndPropsInference2.ts, 0, 0)) + +declare function test(fn: ThisTypedOptions): void; +>test : Symbol(test, Decl(vueLikeDataAndPropsInference2.ts, 24, 47), Decl(vueLikeDataAndPropsInference2.ts, 26, 76)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 26, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 26, 27)) +>fn : Symbol(fn, Decl(vueLikeDataAndPropsInference2.ts, 26, 35)) +>ThisTypedOptions : Symbol(ThisTypedOptions, Decl(vueLikeDataAndPropsInference2.ts, 19, 51)) +>Data : Symbol(Data, Decl(vueLikeDataAndPropsInference2.ts, 26, 22)) +>Props : Symbol(Props, Decl(vueLikeDataAndPropsInference2.ts, 26, 27)) + +declare function test(fn: Options): void; +>test : Symbol(test, Decl(vueLikeDataAndPropsInference2.ts, 24, 47), Decl(vueLikeDataAndPropsInference2.ts, 26, 76)) +>fn : Symbol(fn, Decl(vueLikeDataAndPropsInference2.ts, 27, 22)) +>Options : Symbol(Options, Decl(vueLikeDataAndPropsInference2.ts, 8, 1)) + +test({ +>test : Symbol(test, Decl(vueLikeDataAndPropsInference2.ts, 24, 47), Decl(vueLikeDataAndPropsInference2.ts, 26, 76)) + + props: { +>props : Symbol(props, Decl(vueLikeDataAndPropsInference2.ts, 29, 6)) + + foo: '' +>foo : Symbol(foo, Decl(vueLikeDataAndPropsInference2.ts, 30, 12)) + + }, + + data(): { bar: boolean } { +>data : Symbol(data, Decl(vueLikeDataAndPropsInference2.ts, 32, 6)) +>bar : Symbol(bar, Decl(vueLikeDataAndPropsInference2.ts, 34, 13)) + + return { + bar: true +>bar : Symbol(bar, Decl(vueLikeDataAndPropsInference2.ts, 35, 16)) + } + }, + + watch: { +>watch : Symbol(watch, Decl(vueLikeDataAndPropsInference2.ts, 38, 6)) + + foo(newVal: string, oldVal: string): void { +>foo : Symbol(foo, Decl(vueLikeDataAndPropsInference2.ts, 40, 12)) +>newVal : Symbol(newVal, Decl(vueLikeDataAndPropsInference2.ts, 41, 12)) +>oldVal : Symbol(oldVal, Decl(vueLikeDataAndPropsInference2.ts, 41, 27)) + + this.bar = false + } + } +}) diff --git a/tests/baselines/reference/vueLikeDataAndPropsInference2.types b/tests/baselines/reference/vueLikeDataAndPropsInference2.types new file mode 100644 index 00000000000..6900535285a --- /dev/null +++ b/tests/baselines/reference/vueLikeDataAndPropsInference2.types @@ -0,0 +1,98 @@ +=== tests/cases/compiler/vueLikeDataAndPropsInference2.ts === +interface Instance { + _instanceBrand: never +>_instanceBrand : never +} + +type DataDef = (this: Readonly & Instance) => Data +>DataDef : DataDef +>this : Readonly & Instance + +type PropsDefinition = { +>PropsDefinition : PropsDefinition + + [K in keyof T]: T[K] +} + +interface Options< + Data = object | ((this: Instance) => object), +>this : Instance + + PropsDef = PropsDefinition> + > { + data?: Data +>data : Data + + props?: PropsDef +>props : PropsDef + + watch?: Record> +>watch : Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; +>WatchHandler : WatchHandler +>val : T +>oldVal : T + +type ThisTypedOptions = +>ThisTypedOptions : ThisTypedOptions + + object & + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +>test : { (fn: ThisTypedOptions): void; (fn: Options object), PropsDefinition>>): void; } +>fn : ThisTypedOptions + +declare function test(fn: Options): void; +>test : { (fn: ThisTypedOptions): void; (fn: Options object), PropsDefinition>>): void; } +>fn : Options object), PropsDefinition>> + +test({ +>test({ props: { foo: '' }, data(): { bar: boolean } { return { bar: true } }, watch: { foo(newVal: string, oldVal: string): void { this.bar = false } }}) : void +>test : { (fn: ThisTypedOptions): void; (fn: Options object), PropsDefinition>>): void; } +>{ props: { foo: '' }, data(): { bar: boolean } { return { bar: true } }, watch: { foo(newVal: string, oldVal: string): void { this.bar = false } }} : { props: { foo: string; }; data(this: Readonly<{ foo: string; }> & Instance): { bar: boolean; }; watch: { foo(newVal: string, oldVal: string): void; }; } + + props: { +>props : { foo: string; } +>{ foo: '' } : { foo: string; } + + foo: '' +>foo : string +>'' : "" + + }, + + data(): { bar: boolean } { +>data : (this: Readonly<{ foo: string; }> & Instance) => { bar: boolean; } +>bar : boolean + + return { +>{ bar: true } : { bar: true; } + + bar: true +>bar : true +>true : true + } + }, + + watch: { +>watch : { foo(newVal: string, oldVal: string): void; } +>{ foo(newVal: string, oldVal: string): void { this.bar = false } } : { foo(newVal: string, oldVal: string): void; } + + foo(newVal: string, oldVal: string): void { +>foo : (newVal: string, oldVal: string) => void +>newVal : string +>oldVal : string + + this.bar = false +>this.bar = false : false +>this.bar : any +>this : any +>bar : any +>false : false + } + } +}) diff --git a/tests/cases/compiler/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts b/tests/cases/compiler/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts new file mode 100644 index 00000000000..4dc45c54005 --- /dev/null +++ b/tests/cases/compiler/comparisonOfPartialDeepAndIndexedAccessTerminatesWithoutError.ts @@ -0,0 +1,11 @@ +// @strict: true +type PartialDeep = {[K in keyof T]?: PartialDeep}; +type Many = T | readonly T[]; + +interface Collection { + sortBy(...iteratees: Many>[]): Collection; +} + +const x: Collection<{x: number}> = (null as any as Collection<{x: number, y: number}>); + +export {}; diff --git a/tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.ts b/tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.ts new file mode 100644 index 00000000000..3dbc6ec9ec3 --- /dev/null +++ b/tests/cases/compiler/quickIntersectionCheckCorrectlyCachesErrors.ts @@ -0,0 +1,15 @@ +// @jsx: react +// @filename: quickIntersectionCheckCorrectlyCachesErrors.tsx +interface F

{ + (props: P & { children?: boolean }): void; + propTypes: { [K in keyof P]: null extends P ? K : K }; +} +declare function g(C: F): string; +export function wu(CC: F) { + class WU { + m() { + g(CC) + return ; + } + } +} diff --git a/tests/cases/compiler/vueLikeDataAndPropsInference.ts b/tests/cases/compiler/vueLikeDataAndPropsInference.ts new file mode 100644 index 00000000000..1a227744109 --- /dev/null +++ b/tests/cases/compiler/vueLikeDataAndPropsInference.ts @@ -0,0 +1,45 @@ +interface Instance { + _instanceBrand: never +} + +type DataDef = (this: Readonly & Instance) => Data + +type PropsDefinition = { + [K in keyof T]: T[K] +} + +interface Options< + Data = ((this: Instance) => object), + PropsDef = {} + > { + data?: Data + props?: PropsDef + watch?: Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; + +type ThisTypedOptions = + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +declare function test(fn: Options): void; + +test({ + props: { + foo: '' + }, + + data(): { bar: boolean } { + return { + bar: true + } + }, + + watch: { + foo(newVal: string, oldVal: string): void { + this.bar = false + } + } +}) \ No newline at end of file diff --git a/tests/cases/compiler/vueLikeDataAndPropsInference2.ts b/tests/cases/compiler/vueLikeDataAndPropsInference2.ts new file mode 100644 index 00000000000..99903e6e37d --- /dev/null +++ b/tests/cases/compiler/vueLikeDataAndPropsInference2.ts @@ -0,0 +1,46 @@ +interface Instance { + _instanceBrand: never +} + +type DataDef = (this: Readonly & Instance) => Data + +type PropsDefinition = { + [K in keyof T]: T[K] +} + +interface Options< + Data = object | ((this: Instance) => object), + PropsDef = PropsDefinition> + > { + data?: Data + props?: PropsDef + watch?: Record> +} + +type WatchHandler = (val: T, oldVal: T) => void; + +type ThisTypedOptions = + object & + Options, PropsDefinition> & + ThisType & Instance> + +declare function test(fn: ThisTypedOptions): void; +declare function test(fn: Options): void; + +test({ + props: { + foo: '' + }, + + data(): { bar: boolean } { + return { + bar: true + } + }, + + watch: { + foo(newVal: string, oldVal: string): void { + this.bar = false + } + } +}) \ No newline at end of file diff --git a/tests/cases/conformance/jsdoc/enumTagOnExports.ts b/tests/cases/conformance/jsdoc/enumTagOnExports.ts new file mode 100644 index 00000000000..ce8bd0b1237 --- /dev/null +++ b/tests/cases/conformance/jsdoc/enumTagOnExports.ts @@ -0,0 +1,10 @@ +// @filename: enumTagOnExports.js +// @allowjs: true +// @checkjs: true +// @noemit: true + +/** @enum {number} */ +exports.a = {}; + +/** @enum {string} */ +module.exports.b = {}; diff --git a/tests/cases/conformance/jsdoc/enumTagOnExports2.ts b/tests/cases/conformance/jsdoc/enumTagOnExports2.ts new file mode 100644 index 00000000000..3a463313837 --- /dev/null +++ b/tests/cases/conformance/jsdoc/enumTagOnExports2.ts @@ -0,0 +1,7 @@ +// @filename: enumTagOnExports.js +// @allowjs: true +// @checkjs: true +// @noemit: true + +/** @enum {string} */ +module.exports = {}; diff --git a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter index 722ebf8053d..1bf5836cae5 160000 --- a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter +++ b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter @@ -1 +1 @@ -Subproject commit 722ebf8053d2bf82bb66134b21c7e291ccae35c4 +Subproject commit 1bf5836cae5246b89bbf7063c3e84e110222fcdf diff --git a/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter b/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter index 19c71f2c6a2..bfc20b2f17c 160000 --- a/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter +++ b/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter @@ -1 +1 @@ -Subproject commit 19c71f2c6a2b874b1b2bb28a8526b19185b8eece +Subproject commit bfc20b2f17c0206105e2cdd42cd35d79dd03a884 diff --git a/tests/cases/user/create-react-app/create-react-app b/tests/cases/user/create-react-app/create-react-app index 6dec056de3c..437b83f0337 160000 --- a/tests/cases/user/create-react-app/create-react-app +++ b/tests/cases/user/create-react-app/create-react-app @@ -1 +1 @@ -Subproject commit 6dec056de3c646fa1bce41acadc31641237863a0 +Subproject commit 437b83f0337a5d57ce7dd976d2c3b44cb2037e45 diff --git a/tests/cases/user/prettier/prettier b/tests/cases/user/prettier/prettier index 223443c057e..23146404850 160000 --- a/tests/cases/user/prettier/prettier +++ b/tests/cases/user/prettier/prettier @@ -1 +1 @@ -Subproject commit 223443c057e64ca04cda5c0f37f5d15daaf69337 +Subproject commit 23146404850011972f695fb6bc2b8113c3cffbfc diff --git a/tests/cases/user/puppeteer/puppeteer b/tests/cases/user/puppeteer/puppeteer index cba0f98a2ac..b6b29502eb6 160000 --- a/tests/cases/user/puppeteer/puppeteer +++ b/tests/cases/user/puppeteer/puppeteer @@ -1 +1 @@ -Subproject commit cba0f98a2ac7edd3c2bffd0ac53185877403da6b +Subproject commit b6b29502eb6a75fe3869806f0e7b27195fe51b0d diff --git a/tests/cases/user/webpack/webpack b/tests/cases/user/webpack/webpack index c3ed21fb73e..743ae6da9a6 160000 --- a/tests/cases/user/webpack/webpack +++ b/tests/cases/user/webpack/webpack @@ -1 +1 @@ -Subproject commit c3ed21fb73ea352e17421540cc28ffc5e30969cd +Subproject commit 743ae6da9a6fc3b459a7ab3bb250fb07d14f9c5d