mirror of
https://github.com/openharmony/ark_ts2abc.git
synced 2026-07-21 08:25:24 -04:00
4dbd6a47f7
Signed-off-by: zhangrengao <zhangrengao1@huawei.com> Change-Id: Ie8f71fc157d4b8fc2cb61edc267bf0218bb0fff1
13245 lines
474 KiB
Diff
13245 lines
474 KiB
Diff
From 93dbec5e710a8cb28ca8b7f0c70b9ade4a8fc911 Mon Sep 17 00:00:00 2001
|
||
Date: Sat, 15 Jan 2022 21:39:48 +0800
|
||
Subject: [PATCH] test patch
|
||
|
||
---
|
||
.../ambient/ambientDeclarations.ts | 1 +
|
||
.../ambientDeclarationsPatterns.ts | 11 +
|
||
.../declarations.d.ts | 18 +
|
||
.../ambient/ambientInsideNonAmbient.ts | 2 +
|
||
.../ambientInsideNonAmbientExternalModule.ts | 4 +-
|
||
.../ambientShorthand_merging.ts | 6 +
|
||
.../declarations1.d.ts | 2 +
|
||
.../declarations2.d.ts | 4 +
|
||
.../ambientShorthand_reExport.ts | 5 +
|
||
.../declarations.d.ts | 2 +
|
||
.../ambientShorthand_reExport/jquery.d.ts | 2 +
|
||
.../ambientShorthand_reExport/reExportAll.ts | 2 +
|
||
.../ambientShorthand_reExport/reExportX.ts | 2 +
|
||
.../async/es5/asyncMethodWithSuper_es5.ts | 1 +
|
||
.../asyncOrYieldAsBindingIdentifier1.ts | 49 ++
|
||
.../classAbstractAsIdentifier.ts | 2 +-
|
||
.../classBody/classWithEmptyBody.ts | 4 +-
|
||
.../classDeclarations/classInsideBlock.ts | 1 +
|
||
.../classWithPredefinedTypesAsNames.ts | 4 +-
|
||
.../classWithSemicolonClassElement1.ts | 3 +-
|
||
.../classWithSemicolonClassElement2.ts | 3 +-
|
||
.../classExpressions/classExpression2.ts | 4 +-
|
||
.../classStaticBlock/classStaticBlock1.ts | 11 +
|
||
.../classStaticBlock/classStaticBlock10.ts | 30 ++
|
||
.../classStaticBlock/classStaticBlock11.ts | 15 +
|
||
.../classStaticBlock/classStaticBlock12.ts | 10 +
|
||
.../classStaticBlock/classStaticBlock13.ts | 14 +
|
||
.../classStaticBlock/classStaticBlock14.ts | 15 +
|
||
.../classStaticBlock/classStaticBlock15.ts | 18 +
|
||
.../classStaticBlock/classStaticBlock16.ts | 26 +
|
||
.../classStaticBlock/classStaticBlock17.ts | 33 ++
|
||
.../classStaticBlock/classStaticBlock18.ts | 15 +
|
||
.../classStaticBlock/classStaticBlock19.ts | 6 +
|
||
.../classStaticBlock/classStaticBlock2.ts | 20 +
|
||
.../classStaticBlock/classStaticBlock20.ts | 13 +
|
||
.../classStaticBlock/classStaticBlock21.ts | 7 +
|
||
.../classStaticBlock/classStaticBlock22.ts | 72 +++
|
||
.../classStaticBlock/classStaticBlock23.ts | 21 +
|
||
.../classStaticBlock/classStaticBlock24.ts | 8 +
|
||
.../classStaticBlock/classStaticBlock25.ts | 23 +
|
||
.../classStaticBlock/classStaticBlock26.ts | 30 ++
|
||
.../classStaticBlock/classStaticBlock27.ts | 17 +
|
||
.../classStaticBlock/classStaticBlock3.ts | 19 +
|
||
.../classStaticBlock/classStaticBlock4.ts | 16 +
|
||
.../classStaticBlock/classStaticBlock5.ts | 19 +
|
||
.../classStaticBlock/classStaticBlock6.ts | 62 +++
|
||
.../classStaticBlock/classStaticBlock7.ts | 43 ++
|
||
.../classStaticBlock/classStaticBlock8.ts | 48 ++
|
||
.../classStaticBlock/classStaticBlock9.ts | 8 +
|
||
.../classStaticBlockUseBeforeDef1.ts | 15 +
|
||
.../classStaticBlockUseBeforeDef2.ts | 10 +
|
||
.../classConstructorAccessibility4.ts | 4 +-
|
||
...structorImplementationWithDefaultValues.ts | 6 +-
|
||
.../declarationEmitReadonly.ts | 3 +-
|
||
.../quotedConstructors.ts | 4 +
|
||
...idesIndexersWithAssignmentCompatibility.ts | 4 +-
|
||
.../superInStaticMembers1.ts | 492 ++++++++++++++++++
|
||
.../thisAndSuperInStaticMembers1.ts | 42 ++
|
||
.../thisAndSuperInStaticMembers2.ts | 42 ++
|
||
.../thisAndSuperInStaticMembers3.ts | 26 +
|
||
.../thisAndSuperInStaticMembers4.ts | 26 +
|
||
.../typeOfThisInStaticMembers.ts | 3 +-
|
||
.../typeOfThisInStaticMembers10.ts | 51 ++
|
||
.../typeOfThisInStaticMembers11.ts | 51 ++
|
||
.../typeOfThisInStaticMembers12.ts | 10 +
|
||
.../typeOfThisInStaticMembers13.ts | 10 +
|
||
.../typeOfThisInStaticMembers3.ts | 12 +
|
||
.../typeOfThisInStaticMembers4.ts | 12 +
|
||
.../typeOfThisInStaticMembers5.ts | 9 +
|
||
.../typeOfThisInStaticMembers6.ts | 7 +
|
||
.../typeOfThisInStaticMembers7.ts | 12 +
|
||
.../typeOfThisInStaticMembers8.ts | 19 +
|
||
.../typeOfThisInStaticMembers9.ts | 22 +
|
||
.../privateNameComputedPropertyName3.ts | 2 +
|
||
.../privateNames/privateNameFieldAccess.ts | 1 +
|
||
.../privateNames/privateNameHashCharName.ts | 11 +
|
||
.../privateNames/privateNameInInExpression.ts | 119 +++++
|
||
.../privateNameInInExpressionTransform.ts | 47 ++
|
||
.../privateNameInInExpressionUnused.ts | 13 +
|
||
.../privateNamesIncompatibleModifiersJs.ts | 65 +++
|
||
.../classes/mixinClassesAnnotated.ts | 3 +
|
||
.../classes/mixinClassesAnonymous.ts | 2 +
|
||
.../classes/mixinClassesMembers.ts | 5 +
|
||
.../abstractProperty.ts | 3 +
|
||
.../abstractPropertyInitializer.ts | 5 +
|
||
.../instanceMemberInitialization.ts | 7 +-
|
||
...instanceMemberWithComputedPropertyName2.ts | 1 +
|
||
.../staticFactory1.ts | 3 +-
|
||
.../staticAndNonStaticPropertiesSameName.ts | 3 +-
|
||
.../staticPropertyAndFunctionWithSameName.ts | 4 +-
|
||
...icPropertyNameConflictsInAmbientContext.ts | 10 +
|
||
.../controlFlow/assertionTypePredicates2.ts | 27 +
|
||
.../controlFlow/controlFlowAliasing.ts | 285 ++++++++++
|
||
.../controlFlowAliasingCatchVariables.ts | 28 +
|
||
.../controlFlow/controlFlowElementAccess2.ts | 2 +-
|
||
.../controlFlow/controlFlowForInStatement2.ts | 25 +
|
||
.../controlFlow/controlFlowInOperator.ts | 26 +
|
||
.../controlFlowInstanceofExtendsFunction.ts | 4 +-
|
||
.../controlFlowSuperPropertyAccess.ts | 1 +
|
||
.../controlFlow/controlFlowTypeofObject.ts | 71 +++
|
||
.../dependentDestructuredVariables.ts | 161 ++++++
|
||
.../typeGuardsNestedAssignments.ts | 3 +-
|
||
.../controlFlow/typeGuardsTypeParameters.ts | 1 +
|
||
.../declarationEmitWorkWithInlineComments.ts | 5 +-
|
||
.../declarationEmitThisPredicates01.ts | 3 +-
|
||
...tionEmitThisPredicatesWithPrivateName01.ts | 3 +-
|
||
.../typeReferenceRelatedFiles/fs.d.ts | 5 +
|
||
.../typeReferenceRelatedFiles/main.ts | 2 +
|
||
.../typeReferenceRelatedFiles/package.json | 4 +
|
||
.../typeReferenceRelatedFiles.ts | 18 +
|
||
.../decoratorOnClassConstructorParameter5.ts | 15 +
|
||
.../class/decoratedBlockScopedClass1.ts | 16 +
|
||
.../class/decoratedBlockScopedClass2.ts | 19 +
|
||
.../class/decoratedBlockScopedClass3.ts | 27 +
|
||
.../class/method/decoratorOnClassMethod14.ts | 14 +
|
||
.../class/method/decoratorOnClassMethod15.ts | 12 +
|
||
.../class/method/decoratorOnClassMethod16.ts | 12 +
|
||
.../class/method/decoratorOnClassMethod17.ts | 11 +
|
||
.../class/method/decoratorOnClassMethod18.ts | 11 +
|
||
.../decoratorMetadataWithTypeOnlyImport2.ts | 17 +
|
||
...ter.asyncGenerators.classMethods.es2015.ts | 11 +
|
||
.../conformance/es2018/es2018IntlAPIs.ts | 7 +
|
||
.../conformance/es2020/es2020IntlAPIs.ts | 45 ++
|
||
...tionWithPropertyAccessInHeritageClause1.ts | 4 +-
|
||
.../superCallBeforeThisAccessing1.ts | 1 +
|
||
.../superCallBeforeThisAccessing2.ts | 1 +
|
||
.../superCallBeforeThisAccessing5.ts | 1 +
|
||
.../superCallBeforeThisAccessing8.ts | 1 +
|
||
.../es6/spread/arraySpreadImportHelpers.ts | 16 +
|
||
...mplateStringWithCommentsInArrowFunction.ts | 14 +
|
||
.../expressions/asOperator/asOperatorASI.ts | 1 +
|
||
.../comparisonOperatorWithIdenticalObjects.ts | 6 +-
|
||
.../comparisonOperatorWithIntersectionType.ts | 5 +
|
||
...nshipObjectsOnInstantiatedCallSignature.ts | 4 +-
|
||
...jectsOnInstantiatedConstructorSignature.ts | 4 +-
|
||
...peratorWithSubtypeObjectOnCallSignature.ts | 3 +-
|
||
...WithSubtypeObjectOnConstructorSignature.ts | 3 +-
|
||
...eratorWithSubtypeObjectOnIndexSignature.ts | 3 +-
|
||
...ubtypeObjectOnInstantiatedCallSignature.ts | 3 +-
|
||
...bjectOnInstantiatedConstructorSignature.ts | 3 +-
|
||
...isonOperatorWithSubtypeObjectOnProperty.ts | 6 +-
|
||
...anceofOperatorWithInvalidStaticToString.ts | 3 +
|
||
.../instanceofOperatorWithLHSIsObject.ts | 1 +
|
||
...ommaOperatorWithSecondOperandObjectType.ts | 1 +
|
||
.../conditionalOperatorWithIdenticalBCT.ts | 3 +
|
||
.../superCallParameterContextualTyping1.ts | 2 +
|
||
.../superCallParameterContextualTyping3.ts | 3 +-
|
||
.../functionCalls/callWithSpread.ts | 1 +
|
||
.../functions/arrowFunctionExpressions.ts | 1 +
|
||
.../newOperator/newOperatorConformance.ts | 1 +
|
||
.../expressions/superCalls/superCalls.ts | 2 +
|
||
.../thisKeyword/typeOfThisGeneral.ts | 178 +++++++
|
||
.../typeGuards/TypeGuardWithArrayUnion.ts | 1 +
|
||
.../typeGuards/typeGuardFunction.ts | 6 +-
|
||
.../typeGuards/typeGuardFunctionGenerics.ts | 4 +-
|
||
.../typeGuardOfFormExpr1AndExpr2.ts | 3 +-
|
||
.../typeGuards/typeGuardOfFormExpr1OrExpr2.ts | 3 +-
|
||
.../typeGuards/typeGuardOfFormInstanceOf.ts | 45 +-
|
||
.../typeGuards/typeGuardOfFormIsType.ts | 5 +-
|
||
.../typeGuardOfFormTypeOfBoolean.ts | 1 +
|
||
.../typeGuards/typeGuardOfFormTypeOfNumber.ts | 1 +
|
||
.../typeGuards/typeGuardOfFormTypeOfString.ts | 1 +
|
||
.../typeGuardOfFromPropNameInUnionType.ts | 9 +
|
||
.../typeGuards/typeGuardsInClassAccessors.ts | 1 +
|
||
.../typeGuards/typeGuardsInClassMethods.ts | 1 +
|
||
.../typeGuards/typeGuardsInProperties.ts | 3 +-
|
||
.../typeGuards/typeGuardsOnClassProperty.ts | 3 +-
|
||
.../bitwiseNotOperatorWithNumberType.ts | 3 +-
|
||
.../bitwiseNotOperatorWithStringType.ts | 3 +-
|
||
.../externalModules/exportNonVisibleType.ts | 1 +
|
||
.../moduleResolutionWithoutExtension1.ts | 12 +
|
||
.../moduleResolutionWithoutExtension2.ts | 6 +
|
||
.../moduleResolutionWithoutExtension3.ts | 12 +
|
||
.../moduleResolutionWithoutExtension4.ts | 12 +
|
||
.../moduleResolutionWithoutExtension5.ts | 6 +
|
||
.../moduleResolutionWithoutExtension6.ts | 8 +
|
||
.../moduleResolutionWithoutExtension7.ts | 6 +
|
||
.../moduleResolutionWithoutExtension8.ts | 6 +
|
||
.../typeOnly/exportSpecifiers.ts | 21 +
|
||
.../typeOnly/importDefaultNamedType/a.ts | 2 +
|
||
.../importDefaultNamedType.ts | 5 +
|
||
.../typeOnly/importSpecifiers1.ts | 46 ++
|
||
.../typeOnly/preserveValueImports.ts | 28 +
|
||
.../typeOnly/preserveValueImports_errors.ts | 47 ++
|
||
...erveValueImports_importsNotUsedAsValues.ts | 14 +
|
||
.../preserveValueImports_mixedImports.ts | 13 +
|
||
.../typeOnly/preserveValueImports_module.ts | 4 +
|
||
.../importAssertion/importAssertion1.ts | 37 ++
|
||
.../importAssertion/importAssertion2.ts | 17 +
|
||
.../importAssertion/importAssertion3.ts | 15 +
|
||
.../importAssertion/importAssertion4.ts | 1 +
|
||
.../importAssertion/importAssertion5.ts | 1 +
|
||
.../mergedInterfacesWithMultipleBases3.ts | 6 +-
|
||
.../interfaceExtendsObjectIntersection.ts | 12 +
|
||
.../interfaceWithPropertyOfEveryType.ts | 3 +-
|
||
...duleAndAmbientWithSameNameAndCommonRoot.ts | 1 -
|
||
...onAmbientClassWithSameNameAndCommonRoot.ts | 1 +
|
||
...ionAndNonExportedFunctionThatShareAName.ts | 4 +-
|
||
...ortedAndNonExportedClassesOfTheSameName.ts | 4 +
|
||
...rgeEachWithExportedModulesOfTheSameName.ts | 2 +
|
||
.../codeGeneration/exportCodeGen.ts | 2 +
|
||
.../codeGeneration/nameCollision.ts | 1 +
|
||
.../jsdoc/constructorTagOnClassConstructor.ts | 4 +-
|
||
...bclassWithExplicitNoArgumentConstructor.ts | 3 +-
|
||
.../declarations/jsDeclarationsThisTypes.ts | 4 +-
|
||
.../jsdoc/enumTagImported/enumTagImported.ts | 23 +
|
||
tests/cases/conformance/jsdoc/extendsTag1.ts | 1 +
|
||
.../jsdocAugments_qualifiedName.ts | 10 +
|
||
.../jsdoc/jsdocAugments_withTypeParameter.ts | 1 +
|
||
.../jsdocImplements_namespacedInterface.ts | 2 +
|
||
.../jsdoc/jsdocTemplateTagDefault.ts | 71 +++
|
||
.../jsdoc/jsdocTemplateTagNameResolution.ts | 16 +
|
||
.../jsdoc/jsdocTypeReferenceUseBeforeDef.ts | 1 +
|
||
.../conformance/jsdoc/jsdocVariadicType.ts | 12 +
|
||
tests/cases/conformance/jsdoc/seeTag3.ts | 7 +
|
||
tests/cases/conformance/jsdoc/thisTag2.ts | 11 +
|
||
.../conformance/jsx/jsxParsingError4.tsx | 18 +
|
||
.../jsx/jsxUnclosedParserRecovery.ts | 140 +++++
|
||
.../jsx/tsxReactEmitSpreadAttribute.ts | 32 ++
|
||
.../declarationNotFoundPackageBundlesTypes.ts | 23 +
|
||
.../scopedPackages/index.d.ts | 3 +
|
||
.../scopedPackages/scopedPackages.ts | 12 +
|
||
.../moduleResolution/scopedPackages/z.d.ts | 2 +
|
||
.../scopedPackagesClassic/index.d.ts | 2 +
|
||
.../scopedPackagesClassic.ts | 9 +
|
||
.../untypedModuleImport_allowJs.ts | 12 +
|
||
.../declarations.d.ts | 4 +
|
||
.../untypedModuleImport_vsAmbient.ts | 12 +
|
||
.../allowJs/nodeAllowJsPackageSelfName.ts | 24 +
|
||
.../node/allowJs/nodeModulesAllowJs1.ts | 324 ++++++++++++
|
||
.../allowJs/nodeModulesAllowJsCjsFromJs.ts | 8 +
|
||
...ModulesAllowJsConditionalPackageExports.ts | 126 +++++
|
||
.../nodeModulesAllowJsDynamicImport.ts | 27 +
|
||
.../nodeModulesAllowJsExportAssignment.ts | 32 ++
|
||
...deModulesAllowJsGeneratedNameCollisions.ts | 29 ++
|
||
.../nodeModulesAllowJsImportAssignment.ts | 34 ++
|
||
...eModulesAllowJsImportHelpersCollisions1.ts | 34 ++
|
||
...eModulesAllowJsImportHelpersCollisions2.ts | 30 ++
|
||
...eModulesAllowJsImportHelpersCollisions3.ts | 32 ++
|
||
.../allowJs/nodeModulesAllowJsImportMeta.ts | 23 +
|
||
.../nodeModulesAllowJsPackageExports.ts | 92 ++++
|
||
.../nodeModulesAllowJsPackageImports.ts | 41 ++
|
||
...nodeModulesAllowJsPackagePatternExports.ts | 69 +++
|
||
...lesAllowJsPackagePatternExportsTrailers.ts | 69 +++
|
||
...nodeModulesAllowJsSynchronousCallErrors.ts | 37 ++
|
||
.../nodeModulesAllowJsTopLevelAwait.ts | 25 +
|
||
...lesExportsSpecifierGenerationConditions.ts | 33 ++
|
||
tests/cases/conformance/node/nodeModules1.ts | 321 ++++++++++++
|
||
...odeModulesCjsFormatFileAlwaysHasDefault.ts | 19 +
|
||
.../nodeModulesConditionalPackageExports.ts | 124 +++++
|
||
...tionEmitDynamicImportWithPackageExports.ts | 71 +++
|
||
...odulesDeclarationEmitWithPackageExports.ts | 93 ++++
|
||
.../node/nodeModulesDynamicImport.ts | 24 +
|
||
.../node/nodeModulesExportAssignments.ts | 20 +
|
||
...ModulesExportsBlocksSpecifierResolution.ts | 27 +
|
||
...lesExportsSpecifierGenerationConditions.ts | 34 ++
|
||
...ulesExportsSpecifierGenerationDirectory.ts | 29 ++
|
||
...odulesExportsSpecifierGenerationPattern.ts | 29 ++
|
||
.../node/nodeModulesForbidenSyntax.ts | 67 +++
|
||
.../nodeModulesGeneratedNameCollisions.ts | 26 +
|
||
.../node/nodeModulesImportAssertions.ts | 13 +
|
||
.../node/nodeModulesImportAssignments.ts | 31 ++
|
||
.../nodeModulesImportHelpersCollisions.ts | 31 ++
|
||
.../nodeModulesImportHelpersCollisions2.ts | 27 +
|
||
.../nodeModulesImportHelpersCollisions3.ts | 25 +
|
||
.../conformance/node/nodeModulesImportMeta.ts | 20 +
|
||
.../nodeModulesImportResolutionIntoExport.ts | 24 +
|
||
.../nodeModulesImportResolutionNoCycle.ts | 24 +
|
||
.../node/nodeModulesPackageExports.ts | 90 ++++
|
||
.../node/nodeModulesPackageImports.ts | 38 ++
|
||
.../node/nodeModulesPackagePatternExports.ts | 67 +++
|
||
...odeModulesPackagePatternExportsTrailers.ts | 67 +++
|
||
.../node/nodeModulesResolveJsonModule.ts | 29 ++
|
||
.../node/nodeModulesSynchronousCallErrors.ts | 34 ++
|
||
.../node/nodeModulesTopLevelAwait.ts | 22 +
|
||
.../nodeModulesTypesVersionPackageExports.ts | 53 ++
|
||
.../conformance/node/nodePackageSelfName.ts | 21 +
|
||
.../node/nodePackageSelfNameScoped.ts | 21 +
|
||
.../cases/conformance/override/override10.ts | 3 +-
|
||
.../cases/conformance/override/override12.ts | 1 +
|
||
.../cases/conformance/override/override15.ts | 9 +
|
||
.../cases/conformance/override/override16.ts | 1 +
|
||
.../cases/conformance/override/override17.ts | 1 +
|
||
.../cases/conformance/override/override18.ts | 1 +
|
||
.../cases/conformance/override/override19.ts | 20 +
|
||
.../cases/conformance/override/override20.ts | 34 ++
|
||
.../conformance/override/override_js1.ts | 4 +-
|
||
.../conformance/override/override_js4.ts | 14 +
|
||
.../parserClassDeclaration16.ts | 3 +-
|
||
.../parserClassDeclaration17.ts | 1 +
|
||
.../parserClassDeclaration19.ts | 3 +-
|
||
.../parserClassDeclaration20.ts | 3 +-
|
||
.../parserClassDeclaration23.ts | 3 +-
|
||
.../parserClassDeclaration26.ts | 3 +-
|
||
.../parserClassDeclarationIndexSignature1.ts | 3 +-
|
||
.../parserConstructorDeclaration1.ts | 3 +-
|
||
.../parserConstructorDeclaration5.ts | 3 +-
|
||
.../parserAccessibilityAfterStatic11.ts | 1 +
|
||
.../parserAccessibilityAfterStatic14.ts | 1 +
|
||
.../parserAccessibilityAfterStatic2.ts | 1 +
|
||
.../parserAccessibilityAfterStatic3.ts | 1 +
|
||
.../parserAccessibilityAfterStatic4.ts | 1 +
|
||
.../parserAccessibilityAfterStatic5.ts | 1 +
|
||
.../Generics/parserGenericClass1.ts | 3 +-
|
||
.../Generics/parserGenericClass2.ts | 3 +-
|
||
.../Generics/parserGenericConstraint1.ts | 3 +-
|
||
.../parserIndexMemberDeclaration1.ts | 3 +-
|
||
.../parserIndexMemberDeclaration2.ts | 3 +-
|
||
.../parserIndexMemberDeclaration3.ts | 3 +-
|
||
.../parserIndexMemberDeclaration4.ts | 3 +-
|
||
.../parserIndexMemberDeclaration6.ts | 3 +-
|
||
.../parserMemberVariableDeclaration5.ts | 3 +-
|
||
.../ecmascript5/Protected/Protected3.ts | 3 +-
|
||
.../ecmascript5/Protected/Protected5.ts | 3 +-
|
||
.../ecmascript5/Protected/Protected9.ts | 3 +-
|
||
.../RegressionTests/parser509546.ts | 1 +
|
||
.../RegressionTests/parser509546_1.ts | 1 +
|
||
.../RegressionTests/parser509546_2.ts | 1 +
|
||
.../parser/ecmascript5/parserUnicode3.ts | 3 +-
|
||
.../Iterators/parserForOfStatement22.ts | 4 +
|
||
.../Iterators/parserForOfStatement23.ts | 6 +
|
||
.../Iterators/parserForOfStatement24.ts | 4 +
|
||
.../inferringClassMembersFromAssignments3.ts | 1 +
|
||
.../conformance/salsa/plainJSBinderErrors.ts | 44 ++
|
||
.../conformance/salsa/plainJSRedeclare.ts | 6 +
|
||
.../conformance/salsa/plainJSRedeclare2.ts | 7 +
|
||
.../conformance/salsa/plainJSRedeclare3.ts | 7 +
|
||
.../salsa/plainJSReservedStrict.ts | 7 +
|
||
.../conformance/salsa/spellingUncheckedJS.ts | 51 ++
|
||
.../salsa/typeFromJSInitializer2.ts | 18 +
|
||
.../salsa/typeFromJSInitializer3.ts | 18 +
|
||
.../salsa/typeFromJSInitializer4.ts | 29 ++
|
||
.../salsa/typeFromPropertyAssignment23.ts | 3 +
|
||
.../for-inStatementsAsyncIdentifier.ts | 4 +
|
||
.../returnStatements/returnStatements.ts | 1 +
|
||
.../throwInEnclosingStatements.ts | 1 +
|
||
.../types/any/anyAsGenericFunctionCall.ts | 4 +-
|
||
.../types/any/assignAnyToEveryType.ts | 4 +-
|
||
.../types/any/assignEveryTypeToAny.ts | 4 +-
|
||
.../conformance/types/conditional/variance.ts | 2 +
|
||
...tatedFunctionInferenceWithTypeParameter.ts | 3 +
|
||
.../types/import/importTypeAmbient.ts | 5 +-
|
||
.../types/import/importTypeGenericTypes.ts | 5 +-
|
||
.../types/import/importTypeLocal.ts | 5 +
|
||
.../intersectionOfUnionNarrowing.ts | 16 +
|
||
.../types/keyof/keyofAndIndexedAccess.ts | 20 +
|
||
.../types/literal/literalTypes2.ts | 3 +
|
||
.../types/localTypes/localTypes2.ts | 3 +
|
||
.../types/localTypes/localTypes3.ts | 3 +
|
||
.../mapped/mappedTypeAsClauseRelationships.ts | 27 +
|
||
.../types/mapped/mappedTypeProperties.ts | 42 ++
|
||
.../conformance/types/mapped/mappedTypes3.ts | 4 +-
|
||
.../types/mapped/mappedTypesAndObjects.ts | 2 +
|
||
.../members/classWithProtectedProperty.ts | 4 +-
|
||
.../types/members/indexSignatures1.ts | 325 ++++++++++++
|
||
.../objectTypeHidingMembersOfObject.ts | 4 +-
|
||
.../types/members/objectTypePropertyAccess.ts | 2 +
|
||
.../members/objectTypeWithNumericProperty.ts | 4 +-
|
||
...hStringNamedPropertyOfIllegalCharacters.ts | 2 +
|
||
.../typesWithSpecializedCallSignatures.ts | 5 +-
|
||
...typesWithSpecializedConstructSignatures.ts | 5 +-
|
||
.../namedTypes/classWithOptionalParameter.ts | 5 +-
|
||
.../types/namedTypes/optionalMethods.ts | 3 +
|
||
.../conformance/types/never/neverType.ts | 2 +
|
||
...ureWithoutReturnTypeAnnotationInference.ts | 6 +-
|
||
.../callSignaturesWithDuplicateParameters.ts | 4 +-
|
||
.../callSignaturesWithOptionalParameters.ts | 2 +
|
||
.../callSignaturesWithOptionalParameters2.ts | 4 +-
|
||
.../parametersWithNoAnnotationAreAny.ts | 4 +-
|
||
...reIsNotSubtypeOfNonSpecializedSignature.ts | 3 +
|
||
...atureIsSubtypeOfNonSpecializedSignature.ts | 3 +
|
||
...gLiteralTypesInImplementationSignatures.ts | 2 +
|
||
.../typeParameterAsTypeArgument.ts | 4 +-
|
||
...WithOverloadsThatDifferOnlyByReturnType.ts | 5 +-
|
||
.../indexSignatures/numericIndexingResults.ts | 4 +-
|
||
.../indexSignatures/stringIndexingResults.ts | 2 +
|
||
.../propertyNameWithoutTypeAnnotation.ts | 4 +-
|
||
.../propertyNamesOfReservedWords.ts | 4 +-
|
||
.../stringNamedPropertyAccess.ts | 4 +-
|
||
.../number/extendNumberInterface.ts | 2 +-
|
||
.../undefined/invalidUndefinedValues.ts | 4 +-
|
||
.../undefined/validUndefinedAssignments.ts | 4 +-
|
||
.../types/rest/objectRestParameter.ts | 1 +
|
||
.../typeLiterals/arrayOfFunctionTypes3.ts | 4 +-
|
||
.../functionLiteralForOverloads2.ts | 5 +-
|
||
.../typeQueries/typeQueryOnClass.ts | 5 +-
|
||
.../typeQueries/typeQueryWithReservedWords.ts | 1 +
|
||
.../typeQueries/typeofClass2.ts | 5 +-
|
||
.../typeQueries/typeofModuleWithoutExports.ts | 3 +-
|
||
.../specifyingTypes/typeQueries/typeofThis.ts | 146 ++++++
|
||
.../typeQueries/typeofThisWithImplicitThis.ts | 5 +
|
||
.../types/spread/spreadDuplicate.ts | 21 +
|
||
.../types/spread/spreadDuplicateExact.ts | 22 +
|
||
.../conformance/types/spread/spreadUnion4.ts | 4 +
|
||
.../types/thisType/fluentClasses.ts | 2 +
|
||
.../types/thisType/thisTypeAndConstraints.ts | 3 +
|
||
.../types/thisType/thisTypeInClasses.ts | 6 +
|
||
.../types/thisType/thisTypeInFunctions3.ts | 3 +
|
||
.../thisType/thisTypeInTaggedTemplateCall.ts | 10 +
|
||
.../types/tuple/readonlyArraysAndTuples2.ts | 2 +
|
||
.../circularTypeAliasForUnionWithClass.ts | 4 +
|
||
.../classDoesNotDependOnBaseTypes.ts | 4 +-
|
||
.../types/typeAliases/typeAliases.ts | 4 +-
|
||
...allGenericFunctionWithZeroTypeArguments.ts | 5 +-
|
||
.../functionConstraintSatisfaction.ts | 5 +-
|
||
.../functionConstraintSatisfaction3.ts | 5 +-
|
||
.../innerTypeParameterShadowingOuterOne2.ts | 4 +-
|
||
...rtyAccessOnTypeParameterWithConstraints.ts | 3 +-
|
||
...tyAccessOnTypeParameterWithConstraints2.ts | 7 +-
|
||
...tyAccessOnTypeParameterWithConstraints3.ts | 4 +-
|
||
...AccessOnTypeParameterWithoutConstraints.ts | 4 +-
|
||
.../typeParameterUsedAsConstraint.ts | 7 +
|
||
.../anyAssignabilityInInheritance.ts | 6 +-
|
||
.../anyAssignableToEveryType.ts | 1 +
|
||
.../anyAssignableToEveryType2.ts | 3 +
|
||
.../assignmentCompatWithObjectMembers.ts | 5 +-
|
||
.../assignmentCompatWithObjectMembers2.ts | 2 +
|
||
.../assignmentCompatWithObjectMembers3.ts | 2 +
|
||
...mentCompatWithObjectMembersNumericNames.ts | 2 +
|
||
...allSignatureAssignabilityInInheritance2.ts | 6 +-
|
||
...allSignatureAssignabilityInInheritance4.ts | 6 +-
|
||
...allSignatureAssignabilityInInheritance5.ts | 5 +-
|
||
...uctSignatureAssignabilityInInheritance2.ts | 6 +-
|
||
...uctSignatureAssignabilityInInheritance4.ts | 5 +-
|
||
...uctSignatureAssignabilityInInheritance5.ts | 5 +-
|
||
.../everyTypeAssignableToAny.ts | 2 +
|
||
.../nullAssignableToEveryType.ts | 2 +-
|
||
.../undefinedAssignableToEveryType.ts | 1 +
|
||
.../bestCommonTypeOfConditionalExpressions.ts | 5 +-
|
||
...bestCommonTypeOfConditionalExpressions2.ts | 4 +-
|
||
.../heterogeneousArrayLiterals.ts | 2 +
|
||
.../narrowingConstrainedTypeVariable.ts | 3 +
|
||
.../arrayLiteralsWithRecursiveGenerics.ts | 6 +-
|
||
.../recursiveTypeInGenericConstraint.ts | 5 +-
|
||
.../recursiveTypesUsedAsFunctionParameters.ts | 5 +-
|
||
.../nullIsSubtypeOfEverythingButUndefined.ts | 4 +
|
||
.../stringLiteralTypeIsSubtypeOfString.ts | 4 +-
|
||
.../subtypesAndSuperTypes/subtypesOfAny.ts | 5 +-
|
||
...subtypesOfTypeParameterWithConstraints2.ts | 5 +-
|
||
.../subtypingWithCallSignatures2.ts | 6 +
|
||
.../subtypingWithCallSignatures3.ts | 4 +
|
||
.../subtypingWithCallSignatures4.ts | 6 +-
|
||
.../subtypingWithConstructSignatures2.ts | 5 +
|
||
.../subtypingWithConstructSignatures3.ts | 4 +
|
||
.../subtypingWithConstructSignatures4.ts | 6 +-
|
||
.../subtypingWithConstructSignatures5.ts | 6 +-
|
||
.../subtypingWithObjectMembers4.ts | 6 +-
|
||
.../undefinedIsSubtypeOfEverything.ts | 25 +
|
||
.../objectTypesIdentity.ts | 6 +-
|
||
.../objectTypesIdentity2.ts | 5 +-
|
||
.../objectTypesIdentityWithCallSignatures.ts | 5 +-
|
||
.../objectTypesIdentityWithCallSignatures2.ts | 5 +-
|
||
...yWithCallSignaturesDifferingParamCounts.ts | 5 +-
|
||
...IdentityWithCallSignaturesWithOverloads.ts | 6 +-
|
||
...ectTypesIdentityWithConstructSignatures.ts | 6 +-
|
||
...ctTypesIdentityWithConstructSignatures2.ts | 4 +-
|
||
...ConstructSignaturesDifferingParamCounts.ts | 4 +-
|
||
...tTypesIdentityWithGenericCallSignatures.ts | 6 +-
|
||
...TypesIdentityWithGenericCallSignatures2.ts | 6 +-
|
||
...ricCallSignaturesDifferingByConstraints.ts | 6 +-
|
||
...icCallSignaturesDifferingByConstraints2.ts | 6 +-
|
||
...icCallSignaturesDifferingByConstraints3.ts | 9 +-
|
||
...ericCallSignaturesDifferingByReturnType.ts | 5 +-
|
||
...ricCallSignaturesDifferingByReturnType2.ts | 6 +-
|
||
...lSignaturesDifferingTypeParameterCounts.ts | 6 +-
|
||
...llSignaturesDifferingTypeParameterNames.ts | 5 +-
|
||
...WithGenericCallSignaturesOptionalParams.ts | 5 +-
|
||
...ithGenericCallSignaturesOptionalParams2.ts | 5 +-
|
||
...ithGenericCallSignaturesOptionalParams3.ts | 6 +-
|
||
...nstructSignaturesDifferingByConstraints.ts | 2 +
|
||
...structSignaturesDifferingByConstraints2.ts | 7 +-
|
||
...structSignaturesDifferingByConstraints3.ts | 7 +-
|
||
...onstructSignaturesDifferingByReturnType.ts | 4 +-
|
||
...nstructSignaturesDifferingByReturnType2.ts | 6 +-
|
||
...tSignaturesDifferingTypeParameterCounts.ts | 4 +-
|
||
...ctSignaturesDifferingTypeParameterNames.ts | 6 +-
|
||
...enericConstructSignaturesOptionalParams.ts | 5 +-
|
||
...nericConstructSignaturesOptionalParams2.ts | 5 +-
|
||
...nericConstructSignaturesOptionalParams3.ts | 4 +-
|
||
...objectTypesIdentityWithNumericIndexers1.ts | 3 +
|
||
...objectTypesIdentityWithNumericIndexers2.ts | 5 +
|
||
...objectTypesIdentityWithNumericIndexers3.ts | 3 +
|
||
.../objectTypesIdentityWithOptionality.ts | 6 +-
|
||
.../objectTypesIdentityWithPrivates.ts | 4 +-
|
||
.../objectTypesIdentityWithPrivates2.ts | 1 +
|
||
.../objectTypesIdentityWithPublics.ts | 5 +-
|
||
.../objectTypesIdentityWithStringIndexers.ts | 3 +
|
||
.../objectTypesIdentityWithStringIndexers2.ts | 5 +
|
||
.../typeParametersAreIdenticalToThemselves.ts | 4 +-
|
||
...allWithConstraintsTypeArgumentInference.ts | 3 +
|
||
.../genericCallWithFunctionTypedArguments4.ts | 4 +-
|
||
.../genericCallWithObjectTypeArgs2.ts | 4 +-
|
||
...ricCallWithObjectTypeArgsAndConstraints.ts | 10 +-
|
||
...icCallWithObjectTypeArgsAndConstraints2.ts | 1 +
|
||
...icClassWithObjectTypeArgsAndConstraints.ts | 7 +-
|
||
.../keyofInferenceLowerPriorityThanReturn.ts | 4 +
|
||
.../types/union/discriminatedUnionTypes3.ts | 19 +
|
||
497 files changed, 8097 insertions(+), 197 deletions(-)
|
||
create mode 100644 tests/cases/conformance/ambient/ambientDeclarationsPatterns/ambientDeclarationsPatterns.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientDeclarationsPatterns/declarations.d.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_merging/ambientShorthand_merging.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_merging/declarations1.d.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_merging/declarations2.d.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_reExport/ambientShorthand_reExport.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_reExport/declarations.d.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_reExport/jquery.d.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_reExport/reExportAll.ts
|
||
create mode 100644 tests/cases/conformance/ambient/ambientShorthand_reExport/reExportX.ts
|
||
create mode 100644 tests/cases/conformance/async/es6/functionDeclarations/asyncOrYieldAsBindingIdentifier1.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock1.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock10.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock11.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock12.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock13.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock14.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock15.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock16.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock17.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock18.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock19.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock2.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock20.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock21.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock22.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock23.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock24.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock25.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock26.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock27.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock3.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock7.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock8.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlock9.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts
|
||
create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/superInStaticMembers1.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameHashCharName.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionTransform.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionUnused.ts
|
||
create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiersJs.ts
|
||
create mode 100644 tests/cases/conformance/classes/propertyMemberDeclarations/abstractPropertyInitializer.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/assertionTypePredicates2.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/controlFlowAliasing.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/controlFlowAliasingCatchVariables.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/controlFlowForInStatement2.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/controlFlowInOperator.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/controlFlowTypeofObject.ts
|
||
create mode 100644 tests/cases/conformance/controlFlow/dependentDestructuredVariables.ts
|
||
create mode 100644 tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/fs.d.ts
|
||
create mode 100644 tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/main.ts
|
||
create mode 100644 tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/package.json
|
||
create mode 100644 tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/typeReferenceRelatedFiles.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/constructor/parameter/decoratorOnClassConstructorParameter5.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/decoratedBlockScopedClass1.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/decoratedBlockScopedClass2.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/decoratedBlockScopedClass3.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod14.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod15.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod16.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod17.ts
|
||
create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod18.ts
|
||
create mode 100644 tests/cases/conformance/decorators/decoratorMetadataWithTypeOnlyImport2.ts
|
||
create mode 100644 tests/cases/conformance/es2018/es2018IntlAPIs.ts
|
||
create mode 100644 tests/cases/conformance/es2020/es2020IntlAPIs.ts
|
||
create mode 100644 tests/cases/conformance/es6/spread/arraySpreadImportHelpers.ts
|
||
create mode 100644 tests/cases/conformance/es6/templates/templateStringWithCommentsInArrowFunction.ts
|
||
create mode 100644 tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIntersectionType.ts
|
||
create mode 100644 tests/cases/conformance/expressions/thisKeyword/typeOfThisGeneral.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension1.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension2.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension3.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension4.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension5.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension6.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension7.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/moduleResolutionWithoutExtension8.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/exportSpecifiers.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/a.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/importDefaultNamedType.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/importSpecifiers1.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/preserveValueImports.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/preserveValueImports_errors.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/preserveValueImports_importsNotUsedAsValues.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/preserveValueImports_mixedImports.ts
|
||
create mode 100644 tests/cases/conformance/externalModules/typeOnly/preserveValueImports_module.ts
|
||
create mode 100644 tests/cases/conformance/importAssertion/importAssertion1.ts
|
||
create mode 100644 tests/cases/conformance/importAssertion/importAssertion2.ts
|
||
create mode 100644 tests/cases/conformance/importAssertion/importAssertion3.ts
|
||
create mode 100644 tests/cases/conformance/importAssertion/importAssertion4.ts
|
||
create mode 100644 tests/cases/conformance/importAssertion/importAssertion5.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/enumTagImported/enumTagImported.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/jsdocAugments_qualifiedName/jsdocAugments_qualifiedName.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/jsdocTemplateTagDefault.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/jsdocTemplateTagNameResolution.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/jsdocVariadicType.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/seeTag3.ts
|
||
create mode 100644 tests/cases/conformance/jsdoc/thisTag2.ts
|
||
create mode 100644 tests/cases/conformance/jsx/jsxParsingError4.tsx
|
||
create mode 100644 tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts
|
||
create mode 100644 tests/cases/conformance/jsx/tsxReactEmitSpreadAttribute.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/declarationNotFoundPackageBundlesTypes.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/scopedPackages/index.d.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/scopedPackages/scopedPackages.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/scopedPackages/z.d.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/scopedPackagesClassic/index.d.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/scopedPackagesClassic/scopedPackagesClassic.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/untypedModuleImport_allowJs/untypedModuleImport_allowJs.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/declarations.d.ts
|
||
create mode 100644 tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/untypedModuleImport_vsAmbient.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJs1.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsCjsFromJs.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsConditionalPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsDynamicImport.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsExportAssignment.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsGeneratedNameCollisions.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportAssignment.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions1.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions2.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions3.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportMeta.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageImports.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExports.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExportsTrailers.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsSynchronousCallErrors.ts
|
||
create mode 100644 tests/cases/conformance/node/allowJs/nodeModulesAllowJsTopLevelAwait.ts
|
||
create mode 100644 tests/cases/conformance/node/legacyNodeModulesExportsSpecifierGenerationConditions.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModules1.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesCjsFormatFileAlwaysHasDefault.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesConditionalPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesDeclarationEmitDynamicImportWithPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesDeclarationEmitWithPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesDynamicImport.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesExportAssignments.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesExportsBlocksSpecifierResolution.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationConditions.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationDirectory.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationPattern.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesForbidenSyntax.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesGeneratedNameCollisions.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportAssertions.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportAssignments.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportHelpersCollisions.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportHelpersCollisions2.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportHelpersCollisions3.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportMeta.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportResolutionIntoExport.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesImportResolutionNoCycle.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesPackageImports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesPackagePatternExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesPackagePatternExportsTrailers.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesResolveJsonModule.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesSynchronousCallErrors.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesTopLevelAwait.ts
|
||
create mode 100644 tests/cases/conformance/node/nodeModulesTypesVersionPackageExports.ts
|
||
create mode 100644 tests/cases/conformance/node/nodePackageSelfName.ts
|
||
create mode 100644 tests/cases/conformance/node/nodePackageSelfNameScoped.ts
|
||
create mode 100644 tests/cases/conformance/override/override15.ts
|
||
create mode 100644 tests/cases/conformance/override/override19.ts
|
||
create mode 100644 tests/cases/conformance/override/override20.ts
|
||
create mode 100644 tests/cases/conformance/override/override_js4.ts
|
||
create mode 100644 tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement22.ts
|
||
create mode 100644 tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement23.ts
|
||
create mode 100644 tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement24.ts
|
||
create mode 100644 tests/cases/conformance/salsa/plainJSBinderErrors.ts
|
||
create mode 100644 tests/cases/conformance/salsa/plainJSRedeclare.ts
|
||
create mode 100644 tests/cases/conformance/salsa/plainJSRedeclare2.ts
|
||
create mode 100644 tests/cases/conformance/salsa/plainJSRedeclare3.ts
|
||
create mode 100644 tests/cases/conformance/salsa/plainJSReservedStrict.ts
|
||
create mode 100644 tests/cases/conformance/salsa/spellingUncheckedJS.ts
|
||
create mode 100644 tests/cases/conformance/salsa/typeFromJSInitializer2.ts
|
||
create mode 100644 tests/cases/conformance/salsa/typeFromJSInitializer3.ts
|
||
create mode 100644 tests/cases/conformance/salsa/typeFromJSInitializer4.ts
|
||
create mode 100644 tests/cases/conformance/statements/for-inStatements/for-inStatementsAsyncIdentifier.ts
|
||
create mode 100644 tests/cases/conformance/types/intersection/intersectionOfUnionNarrowing.ts
|
||
create mode 100644 tests/cases/conformance/types/mapped/mappedTypeAsClauseRelationships.ts
|
||
create mode 100644 tests/cases/conformance/types/mapped/mappedTypeProperties.ts
|
||
create mode 100644 tests/cases/conformance/types/members/indexSignatures1.ts
|
||
create mode 100644 tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThis.ts
|
||
create mode 100644 tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThisWithImplicitThis.ts
|
||
create mode 100644 tests/cases/conformance/types/spread/spreadDuplicate.ts
|
||
create mode 100644 tests/cases/conformance/types/spread/spreadDuplicateExact.ts
|
||
create mode 100644 tests/cases/conformance/types/spread/spreadUnion4.ts
|
||
create mode 100644 tests/cases/conformance/types/thisType/thisTypeInTaggedTemplateCall.ts
|
||
create mode 100644 tests/cases/conformance/types/union/discriminatedUnionTypes3.ts
|
||
|
||
diff --git a/tests/cases/conformance/ambient/ambientDeclarations.ts b/tests/cases/conformance/ambient/ambientDeclarations.ts
|
||
index 379f5a5440..156ca565af 100644
|
||
--- a/tests/cases/conformance/ambient/ambientDeclarations.ts
|
||
+++ b/tests/cases/conformance/ambient/ambientDeclarations.ts
|
||
@@ -73,3 +73,4 @@ declare module 'external1' {
|
||
var q;
|
||
}
|
||
|
||
+let qq2 = new cls();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientDeclarationsPatterns/ambientDeclarationsPatterns.ts b/tests/cases/conformance/ambient/ambientDeclarationsPatterns/ambientDeclarationsPatterns.ts
|
||
new file mode 100644
|
||
index 0000000000..8b2be7e0b2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientDeclarationsPatterns/ambientDeclarationsPatterns.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @Filename: user.ts
|
||
+///<reference path="declarations.d.ts" />
|
||
+import {foo, baz} from "foobarbaz";
|
||
+foo(baz);
|
||
+
|
||
+import {foos} from "foosball";
|
||
+foo(foos);
|
||
+
|
||
+// Works with relative file name
|
||
+import fileText from "./file!text";
|
||
+foo(fileText);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientDeclarationsPatterns/declarations.d.ts b/tests/cases/conformance/ambient/ambientDeclarationsPatterns/declarations.d.ts
|
||
new file mode 100644
|
||
index 0000000000..725593c54e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientDeclarationsPatterns/declarations.d.ts
|
||
@@ -0,0 +1,18 @@
|
||
+// @Filename: declarations.d.ts
|
||
+declare module "foo*baz" {
|
||
+ export function foo(s: string): void;
|
||
+}
|
||
+// Augmentations still work
|
||
+declare module "foo*baz" {
|
||
+ export const baz: string;
|
||
+}
|
||
+
|
||
+// Longest prefix wins
|
||
+declare module "foos*" {
|
||
+ export const foos: string;
|
||
+}
|
||
+
|
||
+declare module "*!text" {
|
||
+ const x: string;
|
||
+ export default x;
|
||
+}
|
||
diff --git a/tests/cases/conformance/ambient/ambientInsideNonAmbient.ts b/tests/cases/conformance/ambient/ambientInsideNonAmbient.ts
|
||
index e2f24113c9..d07ac13995 100644
|
||
--- a/tests/cases/conformance/ambient/ambientInsideNonAmbient.ts
|
||
+++ b/tests/cases/conformance/ambient/ambientInsideNonAmbient.ts
|
||
@@ -4,6 +4,7 @@ module M {
|
||
export declare class C { }
|
||
export declare enum E { }
|
||
export declare module M { }
|
||
+ let qq1 = new C();
|
||
}
|
||
|
||
module M2 {
|
||
@@ -12,4 +13,5 @@ module M2 {
|
||
declare class C { }
|
||
declare enum E { }
|
||
declare module M { }
|
||
+ let qq1 = new C();
|
||
}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientInsideNonAmbientExternalModule.ts b/tests/cases/conformance/ambient/ambientInsideNonAmbientExternalModule.ts
|
||
index dbdc315c74..3e1e4bfa35 100644
|
||
--- a/tests/cases/conformance/ambient/ambientInsideNonAmbientExternalModule.ts
|
||
+++ b/tests/cases/conformance/ambient/ambientInsideNonAmbientExternalModule.ts
|
||
@@ -3,4 +3,6 @@ export declare var x;
|
||
export declare function f();
|
||
export declare class C { }
|
||
export declare enum E { }
|
||
-export declare module M { }
|
||
\ No newline at end of file
|
||
+export declare module M { }
|
||
+
|
||
+let qq1 = new C();
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_merging/ambientShorthand_merging.ts b/tests/cases/conformance/ambient/ambientShorthand_merging/ambientShorthand_merging.ts
|
||
new file mode 100644
|
||
index 0000000000..a52d4c04bf
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_merging/ambientShorthand_merging.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @Filename: user.ts
|
||
+///<reference path="declarations1.d.ts" />
|
||
+///<reference path="declarations1.d.ts" />
|
||
+import foo, {bar} from "foo";
|
||
+foo;
|
||
+bar;
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_merging/declarations1.d.ts b/tests/cases/conformance/ambient/ambientShorthand_merging/declarations1.d.ts
|
||
new file mode 100644
|
||
index 0000000000..66bdaa0fc8
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_merging/declarations1.d.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: declarations1.d.ts
|
||
+declare module "foo";
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_merging/declarations2.d.ts b/tests/cases/conformance/ambient/ambientShorthand_merging/declarations2.d.ts
|
||
new file mode 100644
|
||
index 0000000000..ff7233979a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_merging/declarations2.d.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @Filename: declarations2.d.ts
|
||
+declare module "foo" {
|
||
+ export const bar: number;
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_reExport/ambientShorthand_reExport.ts b/tests/cases/conformance/ambient/ambientShorthand_reExport/ambientShorthand_reExport.ts
|
||
new file mode 100644
|
||
index 0000000000..45ba9cd111
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_reExport/ambientShorthand_reExport.ts
|
||
@@ -0,0 +1,5 @@
|
||
+// @Filename: reExportUser.ts
|
||
+import {x} from "./reExportX";
|
||
+import * as $ from "./reExportAll";
|
||
+// '$' is not callable, it is an object.
|
||
+x($);
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_reExport/declarations.d.ts b/tests/cases/conformance/ambient/ambientShorthand_reExport/declarations.d.ts
|
||
new file mode 100644
|
||
index 0000000000..58d1d8215b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_reExport/declarations.d.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: declarations.d.ts
|
||
+declare module "jquery";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_reExport/jquery.d.ts b/tests/cases/conformance/ambient/ambientShorthand_reExport/jquery.d.ts
|
||
new file mode 100644
|
||
index 0000000000..58d1d8215b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_reExport/jquery.d.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: declarations.d.ts
|
||
+declare module "jquery";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportAll.ts b/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportAll.ts
|
||
new file mode 100644
|
||
index 0000000000..ae6c5d4864
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportAll.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: reExportAll.ts
|
||
+export * from "jquery";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportX.ts b/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportX.ts
|
||
new file mode 100644
|
||
index 0000000000..07420e1616
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/ambient/ambientShorthand_reExport/reExportX.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: reExportX.ts
|
||
+export {x} from "jquery";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/async/es5/asyncMethodWithSuper_es5.ts b/tests/cases/conformance/async/es5/asyncMethodWithSuper_es5.ts
|
||
index c89369d02b..9f7e496b8a 100644
|
||
--- a/tests/cases/conformance/async/es5/asyncMethodWithSuper_es5.ts
|
||
+++ b/tests/cases/conformance/async/es5/asyncMethodWithSuper_es5.ts
|
||
@@ -55,3 +55,4 @@ class B extends A {
|
||
({ f: super["x"] } = { f });
|
||
}
|
||
}
|
||
+let b1 = new B();
|
||
diff --git a/tests/cases/conformance/async/es6/functionDeclarations/asyncOrYieldAsBindingIdentifier1.ts b/tests/cases/conformance/async/es6/functionDeclarations/asyncOrYieldAsBindingIdentifier1.ts
|
||
new file mode 100644
|
||
index 0000000000..31c1c4055c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/async/es6/functionDeclarations/asyncOrYieldAsBindingIdentifier1.ts
|
||
@@ -0,0 +1,49 @@
|
||
+// @target: esnext
|
||
+
|
||
+function f_let () {
|
||
+ let await = 1
|
||
+}
|
||
+
|
||
+function f1_var () {
|
||
+ var await = 1
|
||
+}
|
||
+
|
||
+function f1_const () {
|
||
+ const await = 1
|
||
+}
|
||
+
|
||
+async function f2_let () {
|
||
+ let await = 1
|
||
+}
|
||
+
|
||
+async function f2_var () {
|
||
+ var await = 1
|
||
+}
|
||
+
|
||
+async function f2_const () {
|
||
+ const await = 1
|
||
+}
|
||
+
|
||
+function f3_let () {
|
||
+ let yield = 2
|
||
+}
|
||
+
|
||
+function f3_var () {
|
||
+ var yield = 2
|
||
+}
|
||
+
|
||
+function f3_const () {
|
||
+ const yield = 2
|
||
+}
|
||
+
|
||
+function * f4_let () {
|
||
+ let yield = 2;
|
||
+}
|
||
+
|
||
+function * f4_var () {
|
||
+ var yield = 2;
|
||
+}
|
||
+
|
||
+function * f4_const () {
|
||
+ const yield = 2;
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAsIdentifier.ts b/tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAsIdentifier.ts
|
||
index 4c251a03c3..1a1aeedd41 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAsIdentifier.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAsIdentifier.ts
|
||
@@ -1,5 +1,5 @@
|
||
class abstract {
|
||
foo() { return 1; }
|
||
}
|
||
-
|
||
+let a = new abstract()
|
||
new abstract;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classBody/classWithEmptyBody.ts b/tests/cases/conformance/classes/classDeclarations/classBody/classWithEmptyBody.ts
|
||
index 1a2e456e0f..5437d3a67d 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classBody/classWithEmptyBody.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classBody/classWithEmptyBody.ts
|
||
@@ -17,4 +17,6 @@ var d: D;
|
||
var o: {} = d;
|
||
d = 1;
|
||
d = { foo: '' }
|
||
-d = () => { }
|
||
\ No newline at end of file
|
||
+d = () => { }
|
||
+let cc = new C();
|
||
+let dd = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts b/tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts
|
||
index efc3ccff9a..3184fc17d5 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts
|
||
@@ -1,3 +1,4 @@
|
||
function foo() {
|
||
class C { }
|
||
+ let a1 = new C()
|
||
}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classWithPredefinedTypesAsNames.ts b/tests/cases/conformance/classes/classDeclarations/classWithPredefinedTypesAsNames.ts
|
||
index 93daf743f8..1d496f4eaf 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classWithPredefinedTypesAsNames.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classWithPredefinedTypesAsNames.ts
|
||
@@ -3,4 +3,6 @@
|
||
class any { }
|
||
class number { }
|
||
class boolean { }
|
||
-class string { }
|
||
\ No newline at end of file
|
||
+class string { }
|
||
+
|
||
+let aa = new any();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement1.ts b/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement1.ts
|
||
index 6571258d9d..5f049c27e3 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement1.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement1.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let c9 = new C()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement2.ts b/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement2.ts
|
||
index 716c8b58ae..511baa19f9 100644
|
||
--- a/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement2.ts
|
||
+++ b/tests/cases/conformance/classes/classDeclarations/classWithSemicolonClassElement2.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
;
|
||
;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let a15 = new C()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classExpressions/classExpression2.ts b/tests/cases/conformance/classes/classExpressions/classExpression2.ts
|
||
index 6365cd07eb..d39896a361 100644
|
||
--- a/tests/cases/conformance/classes/classExpressions/classExpression2.ts
|
||
+++ b/tests/cases/conformance/classes/classExpressions/classExpression2.ts
|
||
@@ -1,2 +1,4 @@
|
||
class D { }
|
||
-var v = class C extends D {};
|
||
\ No newline at end of file
|
||
+var v = class C extends D {};
|
||
+let dd = new D()
|
||
+let vv = new v()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock1.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock1.ts
|
||
new file mode 100644
|
||
index 0000000000..dd9455ad8c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock1.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @target: esnext, es2015, es5
|
||
+const a = 2;
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ const a = 1;
|
||
+
|
||
+ a;
|
||
+ }
|
||
+}
|
||
+let a1 = new C()
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock10.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock10.ts
|
||
new file mode 100644
|
||
index 0000000000..aa82e1db13
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock10.ts
|
||
@@ -0,0 +1,30 @@
|
||
+// @target: esnext, es2015, es5
|
||
+var a1 = 1;
|
||
+var a2 = 1;
|
||
+const b1 = 2;
|
||
+const b2 = 2;
|
||
+
|
||
+function f () {
|
||
+ var a1 = 11;
|
||
+ const b1 = 22;
|
||
+
|
||
+ class C1 {
|
||
+ static {
|
||
+ var a1 = 111;
|
||
+ var a2 = 111;
|
||
+ const b1 = 222;
|
||
+ const b2 = 222;
|
||
+ }
|
||
+ }
|
||
+ let c1 = new C1();
|
||
+}
|
||
+
|
||
+class C2 {
|
||
+ static {
|
||
+ var a1 = 111;
|
||
+ var a2 = 111;
|
||
+ const b1 = 222;
|
||
+ const b2 = 222;
|
||
+ }
|
||
+}
|
||
+let c2 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock11.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock11.ts
|
||
new file mode 100644
|
||
index 0000000000..00492ae619
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock11.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @target: esnext, es2015
|
||
+
|
||
+let getX;
|
||
+class C {
|
||
+ #x = 1
|
||
+ constructor(x: number) {
|
||
+ this.#x = x;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ // getX has privileged access to #x
|
||
+ getX = (obj: C) => obj.#x;
|
||
+ }
|
||
+}
|
||
+let cc = new C(1);
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock12.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock12.ts
|
||
new file mode 100644
|
||
index 0000000000..436c690665
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock12.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @useDefineForClassFields: false
|
||
+// @target: es2015
|
||
+
|
||
+class C {
|
||
+ static #x = 1;
|
||
+
|
||
+ static {
|
||
+ C.#x;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock13.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock13.ts
|
||
new file mode 100644
|
||
index 0000000000..8120cc3575
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock13.ts
|
||
@@ -0,0 +1,14 @@
|
||
+// @target: esnext, es2015
|
||
+// @useDefineForClassFields: true
|
||
+
|
||
+class C {
|
||
+ static #x = 123;
|
||
+
|
||
+ static {
|
||
+ console.log(C.#x)
|
||
+ }
|
||
+
|
||
+ foo () {
|
||
+ return C.#x;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock14.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock14.ts
|
||
new file mode 100644
|
||
index 0000000000..ff510c8436
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock14.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @useDefineForClassFields: false
|
||
+// @target: es2015
|
||
+
|
||
+class C {
|
||
+ static #_1 = 1;
|
||
+ static #_3 = 1;
|
||
+ static #_5 = 1;
|
||
+
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock15.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock15.ts
|
||
new file mode 100644
|
||
index 0000000000..ec2727660f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock15.ts
|
||
@@ -0,0 +1,18 @@
|
||
+// @target: esnext, es2015
|
||
+// @useDefineForClassFields: true
|
||
+var _C__1;
|
||
+
|
||
+class C {
|
||
+ static #_1 = 1;
|
||
+ static #_3 = 3;
|
||
+ static #_5 = 5;
|
||
+
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+ static {}
|
||
+}
|
||
+
|
||
+console.log(_C__1)
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock16.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock16.ts
|
||
new file mode 100644
|
||
index 0000000000..bc15e5f1ab
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock16.ts
|
||
@@ -0,0 +1,26 @@
|
||
+// @target: es2015
|
||
+
|
||
+let getX: (c: C) => number;
|
||
+class C {
|
||
+ #x = 1
|
||
+ constructor(x: number) {
|
||
+ this.#x = x;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ // getX has privileged access to #x
|
||
+ getX = (obj: C) => obj.#x;
|
||
+ getY = (obj: D) => obj.#y;
|
||
+ }
|
||
+}
|
||
+
|
||
+let getY: (c: D) => number;
|
||
+class D {
|
||
+ #y = 1
|
||
+
|
||
+ static {
|
||
+ // getY has privileged access to y
|
||
+ getX = (obj: C) => obj.#x;
|
||
+ getY = (obj: D) => obj.#y;
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock17.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock17.ts
|
||
new file mode 100644
|
||
index 0000000000..8d26cb4a08
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock17.ts
|
||
@@ -0,0 +1,33 @@
|
||
+// @target: es2015
|
||
+
|
||
+let friendA: { getX(o: A): number, setX(o: A, v: number): void };
|
||
+
|
||
+class A {
|
||
+ #x: number;
|
||
+
|
||
+ constructor (v: number) {
|
||
+ this.#x = v;
|
||
+ }
|
||
+
|
||
+ getX () {
|
||
+ return this.#x;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ friendA = {
|
||
+ getX(obj) { return obj.#x },
|
||
+ setX(obj, value) { obj.#x = value }
|
||
+ };
|
||
+ }
|
||
+};
|
||
+
|
||
+class B {
|
||
+ constructor(a: A) {
|
||
+ const x = friendA.getX(a); // ok
|
||
+ friendA.setX(a, x + 1); // ok
|
||
+ }
|
||
+};
|
||
+
|
||
+const a = new A(41);
|
||
+const b = new B(a);
|
||
+a.getX();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock18.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock18.ts
|
||
new file mode 100644
|
||
index 0000000000..a36bd50917
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock18.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @target: esnext, es2015, es5
|
||
+
|
||
+function foo () {
|
||
+ return class {
|
||
+ static foo = 1;
|
||
+ static {
|
||
+ const c = class {
|
||
+ static bar = 2;
|
||
+ static {
|
||
+ // do
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock19.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock19.ts
|
||
new file mode 100644
|
||
index 0000000000..33bb993be6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock19.ts
|
||
@@ -0,0 +1,6 @@
|
||
+class C {
|
||
+ @decorator
|
||
+ static {
|
||
+ // something
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock2.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock2.ts
|
||
new file mode 100644
|
||
index 0000000000..292d7181bb
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock2.ts
|
||
@@ -0,0 +1,20 @@
|
||
+// @target: esnext, es2015, es5
|
||
+
|
||
+const a = 1;
|
||
+const b = 2;
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ const a = 11;
|
||
+
|
||
+ a;
|
||
+ b;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ const a = 11;
|
||
+
|
||
+ a;
|
||
+ b;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock20.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock20.ts
|
||
new file mode 100644
|
||
index 0000000000..72a9d09161
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock20.ts
|
||
@@ -0,0 +1,13 @@
|
||
+class C {
|
||
+ async static {
|
||
+ // something
|
||
+ }
|
||
+
|
||
+ public static {
|
||
+ // something
|
||
+ }
|
||
+
|
||
+ readonly private static {
|
||
+ // something
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock21.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock21.ts
|
||
new file mode 100644
|
||
index 0000000000..65422df9cd
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock21.ts
|
||
@@ -0,0 +1,7 @@
|
||
+class C {
|
||
+ /* jsdocs */
|
||
+ static {
|
||
+ // something
|
||
+ }
|
||
+}
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock22.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock22.ts
|
||
new file mode 100644
|
||
index 0000000000..8d3be9861a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock22.ts
|
||
@@ -0,0 +1,72 @@
|
||
+// @target: esnext
|
||
+
|
||
+let await: "any";
|
||
+class C {
|
||
+ static {
|
||
+ let await: any; // illegal, cannot declare a new binding for await
|
||
+ }
|
||
+ static {
|
||
+ let { await } = {} as any; // illegal, cannot declare a new binding for await
|
||
+ }
|
||
+ static {
|
||
+ let { await: other } = {} as any; // legal
|
||
+ }
|
||
+ static {
|
||
+ let await; // illegal, cannot declare a new binding for await
|
||
+ }
|
||
+ static {
|
||
+ function await() { }; // illegal
|
||
+ }
|
||
+ static {
|
||
+ class await { }; // illegal
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ class D {
|
||
+ await = 1; // legal
|
||
+ x = await; // legal (initializers have an implicit function boundary)
|
||
+ };
|
||
+ }
|
||
+ static {
|
||
+ (function await() { }); // legal, 'await' in function expression name not bound inside of static block
|
||
+ }
|
||
+ static {
|
||
+ (class await { }); // legal, 'await' in class expression name not bound inside of static block
|
||
+ }
|
||
+ static {
|
||
+ (function () { return await; }); // legal, 'await' is inside of a new function boundary
|
||
+ }
|
||
+ static {
|
||
+ (() => await); // legal, 'await' is inside of a new function boundary
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ class E {
|
||
+ constructor() { await; }
|
||
+ method() { await; }
|
||
+ get accessor() {
|
||
+ await;
|
||
+ return 1;
|
||
+ }
|
||
+ set accessor(v: any) {
|
||
+ await;
|
||
+ }
|
||
+ propLambda = () => { await; }
|
||
+ propFunc = function () { await; }
|
||
+ }
|
||
+ }
|
||
+ static {
|
||
+ class S {
|
||
+ static method() { await; }
|
||
+ static get accessor() {
|
||
+ await;
|
||
+ return 1;
|
||
+ }
|
||
+ static set accessor(v: any) {
|
||
+ await;
|
||
+ }
|
||
+ static propLambda = () => { await; }
|
||
+ static propFunc = function () { await; }
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock23.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock23.ts
|
||
new file mode 100644
|
||
index 0000000000..bb83b27dca
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock23.ts
|
||
@@ -0,0 +1,21 @@
|
||
+// @target: esnext
|
||
+
|
||
+const nums = [1, 2, 3].map(n => Promise.resolve(n))
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ for await (const nn of nums) {
|
||
+ console.log(nn)
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+async function foo () {
|
||
+ class C {
|
||
+ static {
|
||
+ for await (const nn of nums) {
|
||
+ console.log(nn)
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock24.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock24.ts
|
||
new file mode 100644
|
||
index 0000000000..8132238772
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock24.ts
|
||
@@ -0,0 +1,8 @@
|
||
+// @module: commonjs, es2015, es2020, UMD, AMD, System, esnext
|
||
+
|
||
+export class C {
|
||
+ static x: number;
|
||
+ static {
|
||
+ C.x = 1;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock25.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock25.ts
|
||
new file mode 100644
|
||
index 0000000000..56f99a6122
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock25.ts
|
||
@@ -0,0 +1,23 @@
|
||
+// @target: esnext
|
||
+// @declaration: true
|
||
+// @declarationMap: true
|
||
+// @sourceMap: true
|
||
+
|
||
+const a = 1;
|
||
+const b = 2;
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ const a = 11;
|
||
+
|
||
+ a;
|
||
+ b;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ const a = 11;
|
||
+
|
||
+ a;
|
||
+ b;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock26.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock26.ts
|
||
new file mode 100644
|
||
index 0000000000..1081729acd
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock26.ts
|
||
@@ -0,0 +1,30 @@
|
||
+// @target: esnext
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ await; // illegal
|
||
+ }
|
||
+ static {
|
||
+ await (1); // illegal
|
||
+ }
|
||
+ static {
|
||
+ ({ [await]: 1 }); // illegal
|
||
+ }
|
||
+ static {
|
||
+ class D {
|
||
+ [await] = 1; // illegal (computed property names are evaluated outside of a class body
|
||
+ };
|
||
+ }
|
||
+ static {
|
||
+ ({ await }); // illegal short-hand property reference
|
||
+ }
|
||
+ static {
|
||
+ await: // illegal, 'await' cannot be used as a label
|
||
+ break await; // illegal, 'await' cannot be used as a label
|
||
+ }
|
||
+ static {
|
||
+ function f(await) { }
|
||
+ const ff = (await) => { }
|
||
+ const fff = await => { }
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock27.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock27.ts
|
||
new file mode 100644
|
||
index 0000000000..a0429bbb54
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock27.ts
|
||
@@ -0,0 +1,17 @@
|
||
+// https://github.com/microsoft/TypeScript/issues/44872
|
||
+
|
||
+void class Foo {
|
||
+ static prop = 1
|
||
+ static {
|
||
+ console.log(Foo.prop);
|
||
+ Foo.prop++;
|
||
+ }
|
||
+ static {
|
||
+ console.log(Foo.prop);
|
||
+ Foo.prop++;
|
||
+ }
|
||
+ static {
|
||
+ console.log(Foo.prop);
|
||
+ Foo.prop++;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock3.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock3.ts
|
||
new file mode 100644
|
||
index 0000000000..84125fdbed
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock3.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @target: esnext
|
||
+
|
||
+const a = 1;
|
||
+
|
||
+class C {
|
||
+ static f1 = 1;
|
||
+
|
||
+ static {
|
||
+ console.log(C.f1, C.f2, C.f3)
|
||
+ }
|
||
+
|
||
+ static f2 = 2;
|
||
+
|
||
+ static {
|
||
+ console.log(C.f1, C.f2, C.f3)
|
||
+ }
|
||
+
|
||
+ static f3 = 3;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts
|
||
new file mode 100644
|
||
index 0000000000..7a944a4969
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts
|
||
@@ -0,0 +1,16 @@
|
||
+// @target: esnext
|
||
+
|
||
+class C {
|
||
+ static s1 = 1;
|
||
+
|
||
+ static {
|
||
+ this.s1;
|
||
+ C.s1;
|
||
+
|
||
+ this.s2;
|
||
+ C.s2;
|
||
+ }
|
||
+
|
||
+ static s2 = 2;
|
||
+ static ss2 = this.s1;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts
|
||
new file mode 100644
|
||
index 0000000000..2410b532ab
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @target: esnext, es2015, es5
|
||
+
|
||
+class B {
|
||
+ static a = 1;
|
||
+ static b = 2;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static b = 3;
|
||
+ static c = super.a
|
||
+
|
||
+ static {
|
||
+ this.b;
|
||
+ super.b;
|
||
+ super.a;
|
||
+ }
|
||
+}
|
||
+
|
||
+let cc = new C();
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts
|
||
new file mode 100644
|
||
index 0000000000..cdd0cda2fe
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts
|
||
@@ -0,0 +1,62 @@
|
||
+class B {
|
||
+ static a = 1;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static {
|
||
+ let await = 1;
|
||
+ let arguments = 1;
|
||
+ let eval = 1;
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ await: if (true) {
|
||
+
|
||
+ }
|
||
+
|
||
+ arguments;
|
||
+ await;
|
||
+ super();
|
||
+ }
|
||
+}
|
||
+
|
||
+class CC {
|
||
+ constructor () {
|
||
+ class C extends B {
|
||
+ static {
|
||
+ class CC extends B {
|
||
+ constructor () {
|
||
+ super();
|
||
+ }
|
||
+ }
|
||
+ super();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+async function foo () {
|
||
+ class C extends B {
|
||
+ static {
|
||
+ arguments;
|
||
+ await;
|
||
+
|
||
+ async function ff () {
|
||
+ arguments;
|
||
+ await;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function foo1 () {
|
||
+ class C extends B {
|
||
+ static {
|
||
+ arguments;
|
||
+
|
||
+ function ff () {
|
||
+ arguments;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock7.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock7.ts
|
||
new file mode 100644
|
||
index 0000000000..727ada0342
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock7.ts
|
||
@@ -0,0 +1,43 @@
|
||
+class C {
|
||
+ static {
|
||
+ await 1;
|
||
+ yield 1;
|
||
+ return 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+async function f1 () {
|
||
+ class C {
|
||
+ static {
|
||
+ await 1;
|
||
+
|
||
+ async function ff () {
|
||
+ await 1;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function * f2 () {
|
||
+ class C {
|
||
+ static {
|
||
+ yield 1;
|
||
+
|
||
+ function * ff () {
|
||
+ yield 1;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function f3 () {
|
||
+ class C {
|
||
+ static {
|
||
+ return 1;
|
||
+
|
||
+ function ff () {
|
||
+ return 1
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock8.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock8.ts
|
||
new file mode 100644
|
||
index 0000000000..d2e5220b83
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock8.ts
|
||
@@ -0,0 +1,48 @@
|
||
+function foo (v: number) {
|
||
+ label: while (v) {
|
||
+ class C {
|
||
+ static {
|
||
+ if (v === 1) {
|
||
+ break label;
|
||
+ }
|
||
+ if (v === 2) {
|
||
+ continue label;
|
||
+ }
|
||
+ if (v === 3) {
|
||
+ break
|
||
+ }
|
||
+ if (v === 4) {
|
||
+ continue
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (v === 5) {
|
||
+ break label;
|
||
+ }
|
||
+ if (v === 6) {
|
||
+ continue label;
|
||
+ }
|
||
+ if (v === 7) {
|
||
+ break;
|
||
+ }
|
||
+ if (v === 8) {
|
||
+ continue;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ class C {
|
||
+ static {
|
||
+ outer: break outer; // valid
|
||
+ loop: while (v) {
|
||
+ if (v === 1) break loop; // valid
|
||
+ if (v === 2) continue loop; // valid
|
||
+ if (v === 3) break; // valid
|
||
+ if (v === 4) continue; // valid
|
||
+ }
|
||
+ switch (v) {
|
||
+ default: break; // valid
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlock9.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock9.ts
|
||
new file mode 100644
|
||
index 0000000000..d99157b190
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlock9.ts
|
||
@@ -0,0 +1,8 @@
|
||
+// @target: esnext, es2015, es5
|
||
+class A {
|
||
+ static bar = A.foo + 1
|
||
+ static {
|
||
+ A.foo + 2;
|
||
+ }
|
||
+ static foo = 1;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts
|
||
new file mode 100644
|
||
index 0000000000..11f8b7f554
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @target: esnext
|
||
+// @noEmit: true
|
||
+// @strict: true
|
||
+
|
||
+class C {
|
||
+ static x;
|
||
+ static {
|
||
+ this.x = 1;
|
||
+ }
|
||
+ static y = this.x;
|
||
+ static z;
|
||
+ static {
|
||
+ this.z = this.y;
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts
|
||
new file mode 100644
|
||
index 0000000000..89658a6ebe
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @target: esnext
|
||
+// @noEmit: true
|
||
+// @strict: true
|
||
+
|
||
+class C {
|
||
+ static {
|
||
+ this.x = 1;
|
||
+ }
|
||
+ static x;
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/constructorDeclarations/classConstructorAccessibility4.ts b/tests/cases/conformance/classes/constructorDeclarations/classConstructorAccessibility4.ts
|
||
index 3760f2176a..83c7d721b0 100644
|
||
--- a/tests/cases/conformance/classes/constructorDeclarations/classConstructorAccessibility4.ts
|
||
+++ b/tests/cases/conformance/classes/constructorDeclarations/classConstructorAccessibility4.ts
|
||
@@ -14,6 +14,7 @@ class A {
|
||
}
|
||
}
|
||
}
|
||
+let aa = new A();
|
||
|
||
class D {
|
||
protected constructor() { }
|
||
@@ -28,4 +29,5 @@ class D {
|
||
class F extends D { // OK
|
||
}
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let dd = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts
|
||
index bdbcd7f959..c75a4f196b 100644
|
||
--- a/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts
|
||
+++ b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts
|
||
@@ -17,4 +17,8 @@ class E<T extends Date> {
|
||
constructor(x: T = null) {
|
||
var y = x;
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let cc = new C(null);
|
||
+let dd = new D(null);
|
||
+let ee = new E(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/declarationEmitReadonly.ts b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/declarationEmitReadonly.ts
|
||
index 76b41eabba..ffd568ede1 100644
|
||
--- a/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/declarationEmitReadonly.ts
|
||
+++ b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/declarationEmitReadonly.ts
|
||
@@ -2,4 +2,5 @@
|
||
|
||
class C {
|
||
constructor(readonly x: number) {}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let c7 = new C(1)
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/constructorDeclarations/quotedConstructors.ts b/tests/cases/conformance/classes/constructorDeclarations/quotedConstructors.ts
|
||
index c03ce26cc2..e22bf5d126 100644
|
||
--- a/tests/cases/conformance/classes/constructorDeclarations/quotedConstructors.ts
|
||
+++ b/tests/cases/conformance/classes/constructorDeclarations/quotedConstructors.ts
|
||
@@ -29,3 +29,7 @@ class F {
|
||
console.log(this);
|
||
}
|
||
}
|
||
+let c3 =new C()
|
||
+let c4 =new D()
|
||
+let c5 =new E()
|
||
+let c6 =new F()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesIndexersWithAssignmentCompatibility.ts b/tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesIndexersWithAssignmentCompatibility.ts
|
||
index 20243d55be..7806d4f33e 100644
|
||
--- a/tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesIndexersWithAssignmentCompatibility.ts
|
||
+++ b/tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesIndexersWithAssignmentCompatibility.ts
|
||
@@ -14,4 +14,6 @@ class Base2 {
|
||
// ok, use assignment compatibility
|
||
class Derived2 extends Base2 {
|
||
[x: number]: any;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let c1 = new Derived()
|
||
+let c2 = new Derived2()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/superInStaticMembers1.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/superInStaticMembers1.ts
|
||
new file mode 100644
|
||
index 0000000000..fd281b1606
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/superInStaticMembers1.ts
|
||
@@ -0,0 +1,492 @@
|
||
+// @target: es5, es2015, es2021, esnext
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+// @filename: external.ts
|
||
+export class Reflect {}
|
||
+export interface Foo {}
|
||
+export declare namespace Bar { type _ = unknown; }
|
||
+export const enum Baz {}
|
||
+export default class {};
|
||
+
|
||
+// @filename: locals.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+class C extends B {
|
||
+ static _ = [
|
||
+ (() => {
|
||
+ var Reflect; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ var { Reflect } = { Reflect: null }; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ var [Reflect] = [null]; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ class Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ function Reflect() {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ enum Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ const enum Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ type Reflect = unknown; // no collision
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ interface Reflect {}; // no collision
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ (class Reflect {}); // no collision
|
||
+ super.w();
|
||
+ })(),
|
||
+ (() => {
|
||
+ (function Reflect() {}); // no collision
|
||
+ super.w();
|
||
+ })(),
|
||
+ ];
|
||
+
|
||
+ static {
|
||
+ var { Reflect } = { Reflect: null }; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ var [Reflect] = [null]; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ var Reflect; // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ class Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ function Reflect() {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ enum Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ const enum Reflect {} // collision (es2015-es2021 only)
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ type Reflect = unknown; // no collision
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ interface Reflect {} // no collision
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ (class Reflect {}) // no collision
|
||
+ super.w();
|
||
+ }
|
||
+
|
||
+ static {
|
||
+ (function Reflect() {}) // no collision
|
||
+ super.w();
|
||
+ }
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticField1.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var Reflect = null; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticField2.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var { Reflect } = { Reflect: null }; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticField3.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var [Reflect] = [null]; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticBlock1.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var Reflect = null; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticBlock2.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var { Reflect } = { Reflect: null }; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: varInContainingScopeStaticBlock3.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+var [Reflect] = [null]; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: classDeclInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+class Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: classDeclInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+class Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: funcDeclInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+function Reflect() {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: funcDeclInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+function Reflect() {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: valueNamespaceInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+namespace Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: valueNamespaceInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+namespace Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: enumInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+enum Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: enumInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+enum Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: constEnumInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+const enum Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: constEnumInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+const enum Reflect {} // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: namespaceImportInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import * as Reflect from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: namespaceImportInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import * as Reflect from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: namedImportInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Reflect } from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: namedImportInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Reflect } from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfInterfaceInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Foo as Reflect } from "./external"; // collision (es2015-es2021 only, not a type-only import)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfInterfaceInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Foo as Reflect } from "./external"; // collision (es2015-es2021 only, not a type-only import)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfUninstantiatedNamespaceInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Bar as Reflect } from "./external"; // collision (es2015-es2021 only, not a type-only import)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfUninstantiatedNamespaceInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Bar as Reflect } from "./external"; // collision (es2015-es2021 only, not a type-only import)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfConstEnumInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Baz as Reflect } from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: namedImportOfConstEnumInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import { Baz as Reflect } from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: typeOnlyNamedImportInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import type { Reflect } from "./external"; // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: typeOnlyNamedImportInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import type { Reflect } from "./external"; // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: defaultImportInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import Reflect from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: defaultImportInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import Reflect from "./external"; // collision (es2015-es2021 only)
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: typeOnlyDefaultImportInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import type Reflect from "./external"; // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: typeOnlyDefaultImportInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+import type Reflect from "./external"; // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: typeInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+type Reflect = unknown; // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: typeInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+type Reflect = unknown; // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: interfaceInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+interface Reflect {}; // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: interfaceInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+interface Reflect {}; // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: uninstantiatedNamespaceInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+declare namespace Reflect { type _ = unknown; }; // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: uninstantiatedNamespaceInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+declare namespace Reflect { type _ = unknown; }; // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: classExprInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(class Reflect {}); // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: classExprInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(class Reflect {}); // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: inContainingClassExprStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(class Reflect { // collision (es2015-es2021 only)
|
||
+ static {
|
||
+ class C extends B {
|
||
+ static _ = super.w();
|
||
+ }
|
||
+ }
|
||
+});
|
||
+
|
||
+// @filename: inContainingClassExprStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(class Reflect { // collision (es2015-es2021 only)
|
||
+ static {
|
||
+ class C extends B {
|
||
+ static { super.w(); }
|
||
+ }
|
||
+ }
|
||
+});
|
||
+
|
||
+// @filename: funcExprInContainingScopeStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(function Reflect() {}); // no collision
|
||
+class C extends B {
|
||
+ static _ = super.w();
|
||
+}
|
||
+
|
||
+// @filename: funcExprInContainingScopeStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(function Reflect() {}); // no collision
|
||
+class C extends B {
|
||
+ static { super.w(); }
|
||
+}
|
||
+
|
||
+// @filename: inContainingFuncExprStaticField.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(function Reflect() { // collision (es2015-es2021 only)
|
||
+ class C extends B {
|
||
+ static _ = super.w();
|
||
+ }
|
||
+});
|
||
+
|
||
+// @filename: inContainingFuncExprStaticBlock.ts
|
||
+export {};
|
||
+declare class B { static w(): number; }
|
||
+(function Reflect() { // collision (es2015-es2021 only)
|
||
+ class C extends B {
|
||
+ static { super.w(); }
|
||
+ }
|
||
+});
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts
|
||
new file mode 100644
|
||
index 0000000000..e3bfff9aed
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts
|
||
@@ -0,0 +1,42 @@
|
||
+// @target: esnext, es2015
|
||
+// @useDefineForClassFields: true
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+declare class B {
|
||
+ static a: any;
|
||
+ static f(): number;
|
||
+ a: number;
|
||
+ f(): number;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static x: any = undefined!;
|
||
+ static y1 = this.x;
|
||
+ static y2 = this.x();
|
||
+ static y3 = this?.x();
|
||
+ static y4 = this[("x")]();
|
||
+ static y5 = this?.[("x")]();
|
||
+ static z1 = super.a;
|
||
+ static z2 = super["a"];
|
||
+ static z3 = super.f();
|
||
+ static z4 = super["f"]();
|
||
+ static z5 = super.a = 0;
|
||
+ static z6 = super.a += 1;
|
||
+ static z7 = (() => { super.a = 0; })();
|
||
+ static z8 = [super.a] = [0];
|
||
+ static z9 = [super.a = 0] = [0];
|
||
+ static z10 = [...super.a] = [0];
|
||
+ static z11 = { x: super.a } = { x: 0 };
|
||
+ static z12 = { x: super.a = 0 } = { x: 0 };
|
||
+ static z13 = { ...super.a } = { x: 0 };
|
||
+ static z14 = ++super.a;
|
||
+ static z15 = --super.a;
|
||
+ static z16 = ++super[("a")];
|
||
+ static z17 = super.a++;
|
||
+ static z18 = super.a``;
|
||
+
|
||
+ // these should be unaffected
|
||
+ x = 1;
|
||
+ y = this.x;
|
||
+ z = super.f();
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts
|
||
new file mode 100644
|
||
index 0000000000..7e751c3d67
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts
|
||
@@ -0,0 +1,42 @@
|
||
+// @target: esnext, es2015
|
||
+// @useDefineForClassFields: false
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+declare class B {
|
||
+ static a: any;
|
||
+ static f(): number;
|
||
+ a: number;
|
||
+ f(): number;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static x: any = undefined!;
|
||
+ static y1 = this.x;
|
||
+ static y2 = this.x();
|
||
+ static y3 = this?.x();
|
||
+ static y4 = this[("x")]();
|
||
+ static y5 = this?.[("x")]();
|
||
+ static z1 = super.a;
|
||
+ static z2 = super["a"];
|
||
+ static z3 = super.f();
|
||
+ static z4 = super["f"]();
|
||
+ static z5 = super.a = 0;
|
||
+ static z6 = super.a += 1;
|
||
+ static z7 = (() => { super.a = 0; })();
|
||
+ static z8 = [super.a] = [0];
|
||
+ static z9 = [super.a = 0] = [0];
|
||
+ static z10 = [...super.a] = [0];
|
||
+ static z11 = { x: super.a } = { x: 0 };
|
||
+ static z12 = { x: super.a = 0 } = { x: 0 };
|
||
+ static z13 = { ...super.a } = { x: 0 };
|
||
+ static z14 = ++super.a;
|
||
+ static z15 = --super.a;
|
||
+ static z16 = ++super[("a")];
|
||
+ static z17 = super.a++;
|
||
+ static z18 = super.a``;
|
||
+
|
||
+ // these should be unaffected
|
||
+ x = 1;
|
||
+ y = this.x;
|
||
+ z = super.f();
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts
|
||
new file mode 100644
|
||
index 0000000000..413c7c54bc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts
|
||
@@ -0,0 +1,26 @@
|
||
+// @target: es5
|
||
+// @useDefineForClassFields: true
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+declare class B {
|
||
+ static a: any;
|
||
+ static f(): number;
|
||
+ a: number;
|
||
+ f(): number;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static x: any = undefined!;
|
||
+ static y1 = this.x;
|
||
+ static y2 = this.x();
|
||
+ static y3 = this?.x();
|
||
+ static y4 = this[("x")]();
|
||
+ static y5 = this?.[("x")]();
|
||
+ static z3 = super.f();
|
||
+ static z4 = super["f"]();
|
||
+
|
||
+ // these should be unaffected
|
||
+ x = 1;
|
||
+ y = this.x;
|
||
+ z = super.f();
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts
|
||
new file mode 100644
|
||
index 0000000000..aad82e41dc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts
|
||
@@ -0,0 +1,26 @@
|
||
+// @target: es5
|
||
+// @useDefineForClassFields: false
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+declare class B {
|
||
+ static a: any;
|
||
+ static f(): number;
|
||
+ a: number;
|
||
+ f(): number;
|
||
+}
|
||
+
|
||
+class C extends B {
|
||
+ static x: any = undefined!;
|
||
+ static y1 = this.x;
|
||
+ static y2 = this.x();
|
||
+ static y3 = this?.x();
|
||
+ static y4 = this[("x")]();
|
||
+ static y5 = this?.[("x")]();
|
||
+ static z3 = super.f();
|
||
+ static z4 = super["f"]();
|
||
+
|
||
+ // these should be unaffected
|
||
+ x = 1;
|
||
+ y = this.x;
|
||
+ z = super.f();
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers.ts
|
||
index dcba533725..f05e58dcb5 100644
|
||
--- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers.ts
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers.ts
|
||
@@ -30,4 +30,5 @@ var t2 = C2.bar();
|
||
var r5 = t2.foo + 1;
|
||
var r6 = t2.bar();
|
||
var r7 = new t2('');
|
||
-
|
||
+let b2 = new C(1)
|
||
+let b3 = new C2('null')
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts
|
||
new file mode 100644
|
||
index 0000000000..bb458c87d2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts
|
||
@@ -0,0 +1,51 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @experimentalDecorators: true
|
||
+// @useDefineForClassFields: false
|
||
+
|
||
+declare const foo: any;
|
||
+
|
||
+@foo
|
||
+class C {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+@foo
|
||
+class D extends C {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+ static f = () => this.c + 1;
|
||
+ static ff = function () { this.c + 1 }
|
||
+ static foo () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static get fa () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static set fa (v: number) {
|
||
+ this.c = v + 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+class CC {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+class DD extends CC {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+ static f = () => this.c + 1;
|
||
+ static ff = function () { this.c + 1 }
|
||
+ static foo () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static get fa () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static set fa (v: number) {
|
||
+ this.c = v + 1;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts
|
||
new file mode 100644
|
||
index 0000000000..6c4025bc47
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts
|
||
@@ -0,0 +1,51 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @experimentalDecorators: true
|
||
+// @useDefineForClassFields: true
|
||
+
|
||
+declare const foo: any;
|
||
+
|
||
+@foo
|
||
+class C {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+@foo
|
||
+class D extends C {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+ static f = () => this.c + 1;
|
||
+ static ff = function () { this.c + 1 }
|
||
+ static foo () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static get fa () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static set fa (v: number) {
|
||
+ this.c = v + 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+class CC {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+class DD extends CC {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+ static f = () => this.c + 1;
|
||
+ static ff = function () { this.c + 1 }
|
||
+ static foo () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static get fa () {
|
||
+ return this.c + 1;
|
||
+ }
|
||
+ static set fa (v: number) {
|
||
+ this.c = v + 1;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts
|
||
new file mode 100644
|
||
index 0000000000..041089512b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @useDefineForClassFields: false
|
||
+
|
||
+class C {
|
||
+ static readonly c: "foo" = "foo"
|
||
+ static bar = class Inner {
|
||
+ static [this.c] = 123;
|
||
+ [this.c] = 123;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts
|
||
new file mode 100644
|
||
index 0000000000..6c965e0e2d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @useDefineForClassFields: true
|
||
+
|
||
+class C {
|
||
+ static readonly c: "foo" = "foo"
|
||
+ static bar = class Inner {
|
||
+ static [this.c] = 123;
|
||
+ [this.c] = 123;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts
|
||
new file mode 100644
|
||
index 0000000000..27541ce361
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @useDefineForClassFields: false
|
||
+class C {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+class D extends C {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts
|
||
new file mode 100644
|
||
index 0000000000..0d08423bb9
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @target: esnext, es6, es5
|
||
+// @useDefineForClassFields: true
|
||
+class C {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+class D extends C {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = super.a + this.c + 1;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts
|
||
new file mode 100644
|
||
index 0000000000..db6e8a76c6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts
|
||
@@ -0,0 +1,9 @@
|
||
+// @target: esnext, es6, es5
|
||
+
|
||
+class C {
|
||
+ static create = () => new this("yep")
|
||
+
|
||
+ constructor (private foo: string) {
|
||
+
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts
|
||
new file mode 100644
|
||
index 0000000000..b27d0855a2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts
|
||
@@ -0,0 +1,7 @@
|
||
+class C {
|
||
+ static f = 1
|
||
+}
|
||
+
|
||
+class D extends C {
|
||
+ static c = super();
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts
|
||
new file mode 100644
|
||
index 0000000000..1a2d9cd2e2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @target: esnext, es6, es5
|
||
+
|
||
+class C {
|
||
+ static a = 1;
|
||
+ static b = this.a + 1;
|
||
+}
|
||
+
|
||
+class D extends C {
|
||
+ static c = 2;
|
||
+ static d = this.c + 1;
|
||
+ static e = 1 + (super.a) + (this.c + 1) + 1;
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts
|
||
new file mode 100644
|
||
index 0000000000..8b26476f14
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @target: esnext, es6, es5
|
||
+
|
||
+class C {
|
||
+ static f = 1;
|
||
+ static arrowFunctionBoundary = () => this.f + 1;
|
||
+ static functionExprBoundary = function () { return this.f + 2 };
|
||
+ static classExprBoundary = class { a = this.f + 3 };
|
||
+ static functionAndClassDeclBoundary = (() => {
|
||
+ function foo () {
|
||
+ return this.f + 4
|
||
+ }
|
||
+ class CC {
|
||
+ a = this.f + 5
|
||
+ method () {
|
||
+ return this.f + 6
|
||
+ }
|
||
+ }
|
||
+ })();
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts
|
||
new file mode 100644
|
||
index 0000000000..0a648d2fa0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts
|
||
@@ -0,0 +1,22 @@
|
||
+// @target: esnext, es6, es5
|
||
+
|
||
+class C {
|
||
+ static f = 1
|
||
+}
|
||
+
|
||
+class D extends C {
|
||
+ static arrowFunctionBoundary = () => super.f + 1;
|
||
+ static functionExprBoundary = function () { return super.f + 2 };
|
||
+ static classExprBoundary = class { a = super.f + 3 };
|
||
+ static functionAndClassDeclBoundary = (() => {
|
||
+ function foo () {
|
||
+ return super.f + 4
|
||
+ }
|
||
+ class C {
|
||
+ a = super.f + 5
|
||
+ method () {
|
||
+ return super.f +6
|
||
+ }
|
||
+ }
|
||
+ })();
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts
|
||
index 09573f98c9..f57d3afc8b 100644
|
||
--- a/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts
|
||
@@ -23,3 +23,5 @@ class Foo {
|
||
}
|
||
|
||
console.log(new Foo("NAME").getValue(100));
|
||
+
|
||
+let ff = new Foo(null)
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameFieldAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameFieldAccess.ts
|
||
index 4c02159bfa..af502334e7 100644
|
||
--- a/tests/cases/conformance/classes/members/privateNames/privateNameFieldAccess.ts
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameFieldAccess.ts
|
||
@@ -6,3 +6,4 @@ class A {
|
||
console.log(this.#myField);
|
||
}
|
||
}
|
||
+let aa = new A();
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameHashCharName.ts b/tests/cases/conformance/classes/members/privateNames/privateNameHashCharName.ts
|
||
new file mode 100644
|
||
index 0000000000..4a076565bf
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameHashCharName.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @target: es6
|
||
+
|
||
+#
|
||
+
|
||
+class C {
|
||
+ #
|
||
+
|
||
+ m() {
|
||
+ this.#
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts
|
||
new file mode 100644
|
||
index 0000000000..e274378150
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts
|
||
@@ -0,0 +1,119 @@
|
||
+// @strict: true
|
||
+// @target: esnext
|
||
+// @useDefineForClassFields: true
|
||
+
|
||
+class Foo {
|
||
+ #field = 1;
|
||
+ static #staticField = 2;
|
||
+ #method() {}
|
||
+ static #staticMethod() {}
|
||
+
|
||
+ goodRhs(v: any) {
|
||
+ const a = #field in v;
|
||
+
|
||
+ const b = #field in v.p1.p2;
|
||
+
|
||
+ const c = #field in (v as {});
|
||
+
|
||
+ const d = #field in (v as Foo);
|
||
+
|
||
+ const e = #field in (v as never);
|
||
+
|
||
+ for (let f in #field in v as any) { /**/ } // unlikely but valid
|
||
+ }
|
||
+ badRhs(v: any) {
|
||
+ const a = #field in (v as unknown); // Bad - RHS of in must be object type or any
|
||
+
|
||
+ const b = #fiel in v; // Bad - typo in privateID
|
||
+
|
||
+ const c = (#field) in v; // Bad - privateID is not an expression on its own
|
||
+
|
||
+ for (#field in v) { /**/ } // Bad - 'in' not allowed
|
||
+
|
||
+ for (let d in #field in v) { /**/ } // Bad - rhs of in should be a object/any
|
||
+ }
|
||
+ whitespace(v: any) {
|
||
+ const a = v && /*0*/#field/*1*/
|
||
+ /*2*/in/*3*/
|
||
+ /*4*/v/*5*/
|
||
+ }
|
||
+ flow(u: unknown, n: never, fb: Foo | Bar, fs: FooSub, b: Bar, fsb: FooSub | Bar, fsfb: Foo | FooSub | Bar) {
|
||
+
|
||
+ if (typeof u === 'object') {
|
||
+ if (#field in n) {
|
||
+ n; // good n is never
|
||
+ }
|
||
+
|
||
+ if (#field in u) {
|
||
+ u; // good u is Foo
|
||
+ } else {
|
||
+ u; // good u is object | null
|
||
+ }
|
||
+
|
||
+ if (u !== null) {
|
||
+ if (#field in u) {
|
||
+ u; // good u is Foo
|
||
+ } else {
|
||
+ u; // good u is object
|
||
+ }
|
||
+
|
||
+ if (#method in u) {
|
||
+ u; // good u is Foo
|
||
+ }
|
||
+
|
||
+ if (#staticField in u) {
|
||
+ u; // good u is typeof Foo
|
||
+ }
|
||
+
|
||
+ if (#staticMethod in u) {
|
||
+ u; // good u is typeof Foo
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (#field in fb) {
|
||
+ fb; // good fb is Foo
|
||
+ } else {
|
||
+ fb; // good fb is Bar
|
||
+ }
|
||
+
|
||
+ if (#field in fs) {
|
||
+ fs; // good fs is FooSub
|
||
+ } else {
|
||
+ fs; // good fs is never
|
||
+ }
|
||
+
|
||
+ if (#field in b) {
|
||
+ b; // good b is 'Bar & Foo'
|
||
+ } else {
|
||
+ b; // good b is Bar
|
||
+ }
|
||
+
|
||
+ if (#field in fsb) {
|
||
+ fsb; // good fsb is FooSub
|
||
+ } else {
|
||
+ fsb; // good fsb is Bar
|
||
+ }
|
||
+
|
||
+ if (#field in fsfb) {
|
||
+ fsfb; // good fsfb is 'Foo | FooSub'
|
||
+ } else {
|
||
+ fsfb; // good fsfb is Bar
|
||
+ }
|
||
+
|
||
+ class Nested {
|
||
+ m(v: any) {
|
||
+ if (#field in v) {
|
||
+ v; // good v is Foo
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+class FooSub extends Foo { subTypeOfFoo = true }
|
||
+class Bar { notFoo = true }
|
||
+
|
||
+function badSyntax(v: Foo) {
|
||
+ return #field in v; // Bad - outside of class
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionTransform.ts b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionTransform.ts
|
||
new file mode 100644
|
||
index 0000000000..f7be176373
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionTransform.ts
|
||
@@ -0,0 +1,47 @@
|
||
+// @target: esnext, es2020
|
||
+
|
||
+class Foo {
|
||
+ #field = 1;
|
||
+ #method() {}
|
||
+ static #staticField= 2;
|
||
+ static #staticMethod() {}
|
||
+
|
||
+ check(v: any) {
|
||
+ #field in v; // expect Foo's 'field' WeakMap
|
||
+ #method in v; // expect Foo's 'instances' WeakSet
|
||
+ #staticField in v; // expect Foo's constructor
|
||
+ #staticMethod in v; // expect Foo's constructor
|
||
+ }
|
||
+ precedence(v: any) {
|
||
+ // '==' and '||' have lower precedence than 'in'
|
||
+ // 'in' naturally has same precedence as 'in'
|
||
+ // '<<' has higher precedence than 'in'
|
||
+
|
||
+ v == #field in v || v; // Good precedence: (v == (#field in v)) || v
|
||
+
|
||
+ v << #field in v << v; // Good precedence (SyntaxError): (v << #field) in (v << v)
|
||
+
|
||
+ v << #field in v == v; // Good precedence (SyntaxError): ((v << #field) in v) == v
|
||
+
|
||
+ v == #field in v in v; // Good precedence: v == ((#field in v) in v)
|
||
+
|
||
+ #field in v && #field in v; // Good precedence: (#field in v) && (#field in v)
|
||
+ }
|
||
+ invalidLHS(v: any) {
|
||
+ 'prop' in v = 10;
|
||
+ #field in v = 10;
|
||
+ }
|
||
+}
|
||
+
|
||
+class Bar {
|
||
+ #field = 1;
|
||
+ check(v: any) {
|
||
+ #field in v; // expect Bar's 'field' WeakMap
|
||
+ }
|
||
+}
|
||
+
|
||
+function syntaxError(v: Foo) {
|
||
+ return #field in v; // expect `return in v` so runtime will have a syntax error
|
||
+}
|
||
+
|
||
+export { }
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionUnused.ts b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionUnused.ts
|
||
new file mode 100644
|
||
index 0000000000..4b214a2b9e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNameInInExpressionUnused.ts
|
||
@@ -0,0 +1,13 @@
|
||
+// @strict: true
|
||
+// @noUnusedLocals: true
|
||
+// @target: esnext
|
||
+
|
||
+class Foo {
|
||
+ #unused: undefined; // expect unused error
|
||
+ #brand: undefined; // expect no error
|
||
+
|
||
+ isFoo(v: any): v is Foo {
|
||
+ // This should count as using/reading '#brand'
|
||
+ return #brand in v;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiersJs.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiersJs.ts
|
||
new file mode 100644
|
||
index 0000000000..5154b5e439
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiersJs.ts
|
||
@@ -0,0 +1,65 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @strict: true
|
||
+// @target: es6
|
||
+// @outDir: ./out
|
||
+// @filename: privateNamesIncompatibleModifiersJs.js
|
||
+
|
||
+class A {
|
||
+ /**
|
||
+ * @public
|
||
+ */
|
||
+ #a = 1;
|
||
+
|
||
+ /**
|
||
+ * @private
|
||
+ */
|
||
+ #b = 1;
|
||
+
|
||
+ /**
|
||
+ * @protected
|
||
+ */
|
||
+ #c = 1;
|
||
+
|
||
+ /**
|
||
+ * @public
|
||
+ */
|
||
+ #aMethod() { return 1; }
|
||
+
|
||
+ /**
|
||
+ * @private
|
||
+ */
|
||
+ #bMethod() { return 1; }
|
||
+
|
||
+ /**
|
||
+ * @protected
|
||
+ */
|
||
+ #cMethod() { return 1; }
|
||
+
|
||
+ /**
|
||
+ * @public
|
||
+ */
|
||
+ get #aProp() { return 1; }
|
||
+ /**
|
||
+ * @public
|
||
+ */
|
||
+ set #aProp(value) { }
|
||
+
|
||
+ /**
|
||
+ * @private
|
||
+ */
|
||
+ get #bProp() { return 1; }
|
||
+ /**
|
||
+ * @private
|
||
+ */
|
||
+ set #bProp(value) { }
|
||
+
|
||
+ /**
|
||
+ * @protected
|
||
+ */
|
||
+ get #cProp() { return 1; }
|
||
+ /**
|
||
+ * @protected
|
||
+ */
|
||
+ set #cProp(value) { }
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/mixinClassesAnnotated.ts b/tests/cases/conformance/classes/mixinClassesAnnotated.ts
|
||
index 62f5e30c9a..8bca7d06d1 100644
|
||
--- a/tests/cases/conformance/classes/mixinClassesAnnotated.ts
|
||
+++ b/tests/cases/conformance/classes/mixinClassesAnnotated.ts
|
||
@@ -36,6 +36,7 @@ function Tagged<T extends Constructor<{}>>(superClass: T): Constructor<Tagged> &
|
||
this._tag = "hello";
|
||
}
|
||
}
|
||
+ let c = new C();
|
||
return C;
|
||
}
|
||
|
||
@@ -65,3 +66,5 @@ class Thing3 extends Thing2 {
|
||
this.print();
|
||
}
|
||
}
|
||
+let der = new Derived(1,1,1);
|
||
+let th3 = new Thing3('');
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/mixinClassesAnonymous.ts b/tests/cases/conformance/classes/mixinClassesAnonymous.ts
|
||
index 0e42288808..aa639e71e3 100644
|
||
--- a/tests/cases/conformance/classes/mixinClassesAnonymous.ts
|
||
+++ b/tests/cases/conformance/classes/mixinClassesAnonymous.ts
|
||
@@ -62,3 +62,5 @@ const Timestamped = <CT extends Constructor<object>>(Base: CT) => {
|
||
timestamp = new Date();
|
||
};
|
||
}
|
||
+let aa = new Derived(1,1,1);
|
||
+let bb = new Thing3('');
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/mixinClassesMembers.ts b/tests/cases/conformance/classes/mixinClassesMembers.ts
|
||
index 905518c88f..7deb2ac30b 100644
|
||
--- a/tests/cases/conformance/classes/mixinClassesMembers.ts
|
||
+++ b/tests/cases/conformance/classes/mixinClassesMembers.ts
|
||
@@ -97,3 +97,8 @@ class C3 extends Mixed3 {
|
||
}
|
||
f() { return super.f(); }
|
||
}
|
||
+let aa = new C1('');
|
||
+let bb = new M1();
|
||
+let cc = new M2();
|
||
+let dd = new C2();
|
||
+let ee = new C3();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/abstractProperty.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/abstractProperty.ts
|
||
index 5f7266c0ea..7870b163db 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/abstractProperty.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/abstractProperty.ts
|
||
@@ -14,3 +14,6 @@ class B extends A {
|
||
class C extends A {
|
||
protected get x() { return 'C.x' };
|
||
}
|
||
+
|
||
+let b = new B();
|
||
+let c = new C();
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/abstractPropertyInitializer.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/abstractPropertyInitializer.ts
|
||
new file mode 100644
|
||
index 0000000000..42a0999748
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/abstractPropertyInitializer.ts
|
||
@@ -0,0 +1,5 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+abstract class C {
|
||
+ abstract prop = 1
|
||
+}
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberInitialization.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberInitialization.ts
|
||
index 04b44a6835..d7c518964d 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberInitialization.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberInitialization.ts
|
||
@@ -4,8 +4,8 @@ class C {
|
||
|
||
var c = new C();
|
||
c.x = 3;
|
||
-var c2 = new C();
|
||
-var r = c.x === c2.x;
|
||
+// var c2 = new C();
|
||
+// var r = c.x === c2.x;
|
||
|
||
// #31792
|
||
|
||
@@ -14,4 +14,5 @@ var r = c.x === c2.x;
|
||
class MyMap<K, V> {
|
||
constructor(private readonly Map_: { new<K, V>(): any }) {}
|
||
private readonly store = new this.Map_<K, V>();
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let mm = new MyMap(null)
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName2.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName2.ts
|
||
index e597b6b9d9..ed03d54763 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName2.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName2.ts
|
||
@@ -6,3 +6,4 @@ const x = 1;
|
||
class C {
|
||
[x]: string;
|
||
}
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/staticFactory1.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/staticFactory1.ts
|
||
index 5d786cd4cf..0277ffa658 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/staticFactory1.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/staticFactory1.ts
|
||
@@ -10,4 +10,5 @@ class Derived extends Base {
|
||
}
|
||
var d = Derived.create();
|
||
|
||
-d.foo();
|
||
\ No newline at end of file
|
||
+d.foo();
|
||
+let b1 =new Derived()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/staticAndNonStaticPropertiesSameName.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/staticAndNonStaticPropertiesSameName.ts
|
||
index 06a784c782..d3b03f9716 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/staticAndNonStaticPropertiesSameName.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/staticAndNonStaticPropertiesSameName.ts
|
||
@@ -4,4 +4,5 @@ class C {
|
||
|
||
f() { }
|
||
static f() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let a4 = new C()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyAndFunctionWithSameName.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyAndFunctionWithSameName.ts
|
||
index 4566ce26f0..4a275f4eef 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyAndFunctionWithSameName.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyAndFunctionWithSameName.ts
|
||
@@ -6,4 +6,6 @@ class C {
|
||
class D {
|
||
static f: number;
|
||
f() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let a2 =new C()
|
||
+let a3 = new D()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyNameConflictsInAmbientContext.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyNameConflictsInAmbientContext.ts
|
||
index 198c923b0d..d937176b83 100644
|
||
--- a/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyNameConflictsInAmbientContext.ts
|
||
+++ b/tests/cases/conformance/classes/propertyMemberDeclarations/staticPropertyNameConflictsInAmbientContext.ts
|
||
@@ -54,3 +54,13 @@ declare class StaticArgumentsFn {
|
||
static arguments(): any; // ok
|
||
arguments(): any; // ok
|
||
}
|
||
+let a5 =new StaticName()
|
||
+let a6 =new StaticNameFn()
|
||
+let a7 =new StaticLength()
|
||
+let a8 =new StaticLengthFn()
|
||
+let a9 =new StaticPrototype()
|
||
+let a10 =new StaticPrototypeFn()
|
||
+let a11 =new StaticCaller()
|
||
+let a12 =new StaticCallerFn()
|
||
+let a13 =new StaticArguments()
|
||
+let a14 =new StaticArgumentsFn()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/assertionTypePredicates2.ts b/tests/cases/conformance/controlFlow/assertionTypePredicates2.ts
|
||
new file mode 100644
|
||
index 0000000000..915c9ae94f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/assertionTypePredicates2.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: ./out
|
||
+// @filename: assertionTypePredicates2.js
|
||
+
|
||
+/**
|
||
+ * @typedef {{ x: number }} A
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @typedef { A & { y: number } } B
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @param {A} a
|
||
+ * @returns { asserts a is B }
|
||
+ */
|
||
+const foo = (a) => {
|
||
+ if (/** @type { B } */ (a).y !== 0) throw TypeError();
|
||
+ return undefined;
|
||
+};
|
||
+
|
||
+export const main = () => {
|
||
+ /** @type { A } */
|
||
+ const a = { x: 1 };
|
||
+ foo(a);
|
||
+};
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowAliasing.ts b/tests/cases/conformance/controlFlow/controlFlowAliasing.ts
|
||
new file mode 100644
|
||
index 0000000000..03b7530921
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowAliasing.ts
|
||
@@ -0,0 +1,285 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+
|
||
+// Narrowing by aliased conditional expressions
|
||
+
|
||
+function f10(x: string | number) {
|
||
+ const isString = typeof x === "string";
|
||
+ if (isString) {
|
||
+ let t: string = x;
|
||
+ }
|
||
+ else {
|
||
+ let t: number = x;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f11(x: unknown) {
|
||
+ const isString = typeof x === "string";
|
||
+ if (isString) {
|
||
+ let t: string = x;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f12(x: string | number | boolean) {
|
||
+ const isString = typeof x === "string";
|
||
+ const isNumber = typeof x === "number";
|
||
+ if (isString || isNumber) {
|
||
+ let t: string | number = x;
|
||
+ }
|
||
+ else {
|
||
+ let t: boolean = x;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f13(x: string | number | boolean) {
|
||
+ const isString = typeof x === "string";
|
||
+ const isNumber = typeof x === "number";
|
||
+ const isStringOrNumber = isString || isNumber;
|
||
+ if (isStringOrNumber) {
|
||
+ let t: string | number = x;
|
||
+ }
|
||
+ else {
|
||
+ let t: boolean = x;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f14(x: number | null | undefined): number | null {
|
||
+ const notUndefined = x !== undefined;
|
||
+ return notUndefined ? x : 0;
|
||
+}
|
||
+
|
||
+function f15(obj: { readonly x: string | number }) {
|
||
+ const isString = typeof obj.x === 'string';
|
||
+ if (isString) {
|
||
+ let s: string = obj.x;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f16(obj: { readonly x: string | number }) {
|
||
+ const isString = typeof obj.x === 'string';
|
||
+ obj = { x: 42 };
|
||
+ if (isString) {
|
||
+ let s: string = obj.x; // Not narrowed because of is assigned in function body
|
||
+ }
|
||
+}
|
||
+
|
||
+function f17(obj: readonly [string | number]) {
|
||
+ const isString = typeof obj[0] === 'string';
|
||
+ if (isString) {
|
||
+ let s: string = obj[0];
|
||
+ }
|
||
+}
|
||
+
|
||
+function f18(obj: readonly [string | number]) {
|
||
+ const isString = typeof obj[0] === 'string';
|
||
+ obj = [42];
|
||
+ if (isString) {
|
||
+ let s: string = obj[0]; // Not narrowed because of is assigned in function body
|
||
+ }
|
||
+}
|
||
+
|
||
+function f20(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const isFoo = obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f21(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const isFoo: boolean = obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ obj.foo; // Not narrowed because isFoo has type annotation
|
||
+ }
|
||
+ else {
|
||
+ obj.bar; // Not narrowed because isFoo has type annotation
|
||
+ }
|
||
+}
|
||
+
|
||
+function f22(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ let isFoo = obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ obj.foo; // Not narrowed because isFoo is mutable
|
||
+ }
|
||
+ else {
|
||
+ obj.bar; // Not narrowed because isFoo is mutable
|
||
+ }
|
||
+}
|
||
+
|
||
+function f23(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const isFoo = obj.kind === 'foo';
|
||
+ obj = obj;
|
||
+ if (isFoo) {
|
||
+ obj.foo; // Not narrowed because obj is assigned in function body
|
||
+ }
|
||
+ else {
|
||
+ obj.bar; // Not narrowed because obj is assigned in function body
|
||
+ }
|
||
+}
|
||
+
|
||
+function f24(arg: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const obj = arg;
|
||
+ const isFoo = obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f25(arg: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ let obj = arg;
|
||
+ const isFoo = obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ obj.foo; // Not narrowed because obj is mutable
|
||
+ }
|
||
+ else {
|
||
+ obj.bar; // Not narrowed because obj is mutable
|
||
+ }
|
||
+}
|
||
+
|
||
+function f26(outer: { readonly obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number } }) {
|
||
+ const isFoo = outer.obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ outer.obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ outer.obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f27(outer: { obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number } }) {
|
||
+ const isFoo = outer.obj.kind === 'foo';
|
||
+ if (isFoo) {
|
||
+ outer.obj.foo; // Not narrowed because obj is mutable
|
||
+ }
|
||
+ else {
|
||
+ outer.obj.bar; // Not narrowed because obj is mutable
|
||
+ }
|
||
+}
|
||
+
|
||
+function f28(obj?: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const isFoo = obj && obj.kind === 'foo';
|
||
+ const isBar = obj && obj.kind === 'bar';
|
||
+ if (isFoo) {
|
||
+ obj.foo;
|
||
+ }
|
||
+ if (isBar) {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+// Narrowing by aliased discriminant property access
|
||
+
|
||
+function f30(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const kind = obj.kind;
|
||
+ if (kind === 'foo') {
|
||
+ obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f31(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const { kind } = obj;
|
||
+ if (kind === 'foo') {
|
||
+ obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f32(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const { kind: k } = obj;
|
||
+ if (k === 'foo') {
|
||
+ obj.foo;
|
||
+ }
|
||
+ else {
|
||
+ obj.bar;
|
||
+ }
|
||
+}
|
||
+
|
||
+function f33(obj: { kind: 'foo', foo: string } | { kind: 'bar', bar: number }) {
|
||
+ const { kind } = obj;
|
||
+ switch (kind) {
|
||
+ case 'foo': obj.foo; break;
|
||
+ case 'bar': obj.bar; break;
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+class C10 {
|
||
+ constructor(readonly x: string | number) {
|
||
+ const thisX_isString = typeof this.x === 'string';
|
||
+ const xIsString = typeof x === 'string';
|
||
+ if (thisX_isString && xIsString) {
|
||
+ let s: string;
|
||
+ s = this.x;
|
||
+ s = x;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+class C11 {
|
||
+ constructor(readonly x: string | number) {
|
||
+ const thisX_isString = typeof this.x === 'string';
|
||
+ const xIsString = typeof x === 'string';
|
||
+ if (thisX_isString && xIsString) {
|
||
+ // Some narrowings may be invalidated due to later assignments.
|
||
+ let s: string;
|
||
+ s = this.x;
|
||
+ s = x;
|
||
+ }
|
||
+ else {
|
||
+ this.x = 10;
|
||
+ x = 10;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+// Mixing of aliased discriminants and conditionals
|
||
+
|
||
+function f40(obj: { kind: 'foo', foo?: string } | { kind: 'bar', bar?: number }) {
|
||
+ const { kind } = obj;
|
||
+ const isFoo = kind == 'foo';
|
||
+ if (isFoo && obj.foo) {
|
||
+ let t: string = obj.foo;
|
||
+ }
|
||
+}
|
||
+
|
||
+// Unsupported narrowing of destructured payload by destructured discriminant
|
||
+
|
||
+type Data = { kind: 'str', payload: string } | { kind: 'num', payload: number };
|
||
+
|
||
+function gg2(obj: Data) {
|
||
+ if (obj.kind === 'str') {
|
||
+ let t: string = obj.payload;
|
||
+ }
|
||
+ else {
|
||
+ let t: number = obj.payload;
|
||
+ }
|
||
+}
|
||
+
|
||
+function foo({ kind, payload }: Data) {
|
||
+ if (kind === 'str') {
|
||
+ let t: string = payload;
|
||
+ }
|
||
+ else {
|
||
+ let t: number = payload;
|
||
+ }
|
||
+}
|
||
+
|
||
+// Repro from #45830
|
||
+
|
||
+const obj = {
|
||
+ fn: () => true
|
||
+};
|
||
+
|
||
+if (a) { }
|
||
+
|
||
+const a = obj.fn();
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowAliasingCatchVariables.ts b/tests/cases/conformance/controlFlow/controlFlowAliasingCatchVariables.ts
|
||
new file mode 100644
|
||
index 0000000000..a746fa1cd0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowAliasingCatchVariables.ts
|
||
@@ -0,0 +1,28 @@
|
||
+// @useUnknownInCatchVariables: true,false
|
||
+
|
||
+try {}
|
||
+catch (e) {
|
||
+ const isString = typeof e === 'string';
|
||
+ if (isString) {
|
||
+ e.toUpperCase(); // e string
|
||
+ }
|
||
+
|
||
+ if (typeof e === 'string') {
|
||
+ e.toUpperCase(); // e string
|
||
+ }
|
||
+}
|
||
+
|
||
+try {}
|
||
+catch (e) {
|
||
+ const isString = typeof e === 'string';
|
||
+
|
||
+ e = 1;
|
||
+
|
||
+ if (isString) {
|
||
+ e.toUpperCase(); // e any/unknown
|
||
+ }
|
||
+
|
||
+ if (typeof e === 'string') {
|
||
+ e.toUpperCase(); // e string
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowElementAccess2.ts b/tests/cases/conformance/controlFlow/controlFlowElementAccess2.ts
|
||
index fa0592c973..17a2af7895 100644
|
||
--- a/tests/cases/conformance/controlFlow/controlFlowElementAccess2.ts
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowElementAccess2.ts
|
||
@@ -10,4 +10,4 @@ if (typeof config['works'] !== 'boolean') {
|
||
if (typeof config.works !== 'boolean') {
|
||
config['works'].prop = 'test'; // error, config['works']: boolean | { 'prop': string }
|
||
config.works.prop = 'test'; // ok
|
||
-}
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowForInStatement2.ts b/tests/cases/conformance/controlFlow/controlFlowForInStatement2.ts
|
||
new file mode 100644
|
||
index 0000000000..450e50cadc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowForInStatement2.ts
|
||
@@ -0,0 +1,25 @@
|
||
+const keywordA = 'a';
|
||
+const keywordB = 'b';
|
||
+
|
||
+type A = { [keywordA]: number };
|
||
+type B = { [keywordB]: string };
|
||
+
|
||
+declare const c: A | B;
|
||
+
|
||
+if ('a' in c) {
|
||
+ c; // narrowed to `A`
|
||
+}
|
||
+
|
||
+if (keywordA in c) {
|
||
+ c; // also narrowed to `A`
|
||
+}
|
||
+
|
||
+let stringB: string = 'b';
|
||
+
|
||
+if ((stringB as 'b') in c) {
|
||
+ c; // narrowed to `B`
|
||
+}
|
||
+
|
||
+if ((stringB as ('a' | 'b')) in c) {
|
||
+ c; // not narrowed
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowInOperator.ts b/tests/cases/conformance/controlFlow/controlFlowInOperator.ts
|
||
new file mode 100644
|
||
index 0000000000..5dc27c45e8
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowInOperator.ts
|
||
@@ -0,0 +1,26 @@
|
||
+const a = 'a';
|
||
+const b = 'b';
|
||
+const d = 'd';
|
||
+
|
||
+type A = { [a]: number; };
|
||
+type B = { [b]: string; };
|
||
+
|
||
+declare const c: A | B;
|
||
+
|
||
+if ('a' in c) {
|
||
+ c; // A
|
||
+ c['a']; // number;
|
||
+}
|
||
+
|
||
+if ('d' in c) {
|
||
+ c; // never
|
||
+}
|
||
+
|
||
+if (a in c) {
|
||
+ c; // A
|
||
+ c[a]; // number;
|
||
+}
|
||
+
|
||
+if (d in c) {
|
||
+ c; // never
|
||
+}
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowInstanceofExtendsFunction.ts b/tests/cases/conformance/controlFlow/controlFlowInstanceofExtendsFunction.ts
|
||
index 4a1ff7ff86..8780db0c12 100644
|
||
--- a/tests/cases/conformance/controlFlow/controlFlowInstanceofExtendsFunction.ts
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowInstanceofExtendsFunction.ts
|
||
@@ -29,4 +29,6 @@ export const x: X | number = Math.random() > 0.5 ? new X() : 1
|
||
|
||
if (x instanceof X) {
|
||
x.why() // should compile
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let xx = new X();
|
||
+let yy = new Y();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowSuperPropertyAccess.ts b/tests/cases/conformance/controlFlow/controlFlowSuperPropertyAccess.ts
|
||
index b42af687c0..b3710bae0d 100644
|
||
--- a/tests/cases/conformance/controlFlow/controlFlowSuperPropertyAccess.ts
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowSuperPropertyAccess.ts
|
||
@@ -7,3 +7,4 @@ class C extends B {
|
||
super.m && super.m();
|
||
}
|
||
}
|
||
+let qq3 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/controlFlowTypeofObject.ts b/tests/cases/conformance/controlFlow/controlFlowTypeofObject.ts
|
||
new file mode 100644
|
||
index 0000000000..db134447ed
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/controlFlowTypeofObject.ts
|
||
@@ -0,0 +1,71 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+
|
||
+declare function obj(x: object): void;
|
||
+
|
||
+function f1(x: unknown) {
|
||
+ if (!x) {
|
||
+ return;
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+}
|
||
+
|
||
+function f2(x: unknown) {
|
||
+ if (x === null) {
|
||
+ return;
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+}
|
||
+
|
||
+function f3(x: unknown) {
|
||
+ if (x == null) {
|
||
+ return;
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+}
|
||
+
|
||
+function f4(x: unknown) {
|
||
+ if (x == undefined) {
|
||
+ return;
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+}
|
||
+
|
||
+function f5(x: unknown) {
|
||
+ if (!!true) {
|
||
+ if (!x) {
|
||
+ return;
|
||
+ }
|
||
+ }
|
||
+ else {
|
||
+ if (x === null) {
|
||
+ return;
|
||
+ }
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+}
|
||
+
|
||
+function f6(x: unknown) {
|
||
+ if (x === null) {
|
||
+ x;
|
||
+ }
|
||
+ else {
|
||
+ x;
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x);
|
||
+ }
|
||
+ }
|
||
+ if (typeof x === 'object') {
|
||
+ obj(x); // Error
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/controlFlow/dependentDestructuredVariables.ts b/tests/cases/conformance/controlFlow/dependentDestructuredVariables.ts
|
||
new file mode 100644
|
||
index 0000000000..55e95ddf09
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/controlFlow/dependentDestructuredVariables.ts
|
||
@@ -0,0 +1,161 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+// @target: es2015
|
||
+
|
||
+type Action =
|
||
+ | { kind: 'A', payload: number }
|
||
+ | { kind: 'B', payload: string };
|
||
+
|
||
+function f10({ kind, payload }: Action) {
|
||
+ if (kind === 'A') {
|
||
+ payload.toFixed();
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ payload.toUpperCase();
|
||
+ }
|
||
+}
|
||
+
|
||
+function f11(action: Action) {
|
||
+ const { kind, payload } = action;
|
||
+ if (kind === 'A') {
|
||
+ payload.toFixed();
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ payload.toUpperCase();
|
||
+ }
|
||
+}
|
||
+
|
||
+function f12({ kind, payload }: Action) {
|
||
+ switch (kind) {
|
||
+ case 'A':
|
||
+ payload.toFixed();
|
||
+ break;
|
||
+ case 'B':
|
||
+ payload.toUpperCase();
|
||
+ break;
|
||
+ default:
|
||
+ payload; // never
|
||
+ }
|
||
+}
|
||
+
|
||
+type Action2 =
|
||
+ | { kind: 'A', payload: number | undefined }
|
||
+ | { kind: 'B', payload: string | undefined };
|
||
+
|
||
+function f20({ kind, payload }: Action2) {
|
||
+ if (payload) {
|
||
+ if (kind === 'A') {
|
||
+ payload.toFixed();
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ payload.toUpperCase();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function f21(action: Action2) {
|
||
+ const { kind, payload } = action;
|
||
+ if (payload) {
|
||
+ if (kind === 'A') {
|
||
+ payload.toFixed();
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ payload.toUpperCase();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function f22(action: Action2) {
|
||
+ if (action.payload) {
|
||
+ const { kind, payload } = action;
|
||
+ if (kind === 'A') {
|
||
+ payload.toFixed();
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ payload.toUpperCase();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+function f23({ kind, payload }: Action2) {
|
||
+ if (payload) {
|
||
+ switch (kind) {
|
||
+ case 'A':
|
||
+ payload.toFixed();
|
||
+ break;
|
||
+ case 'B':
|
||
+ payload.toUpperCase();
|
||
+ break;
|
||
+ default:
|
||
+ payload; // never
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+type Foo =
|
||
+ | { kind: 'A', isA: true }
|
||
+ | { kind: 'B', isA: false }
|
||
+ | { kind: 'C', isA: false };
|
||
+
|
||
+function f30({ kind, isA }: Foo) {
|
||
+ if (kind === 'A') {
|
||
+ isA; // true
|
||
+ }
|
||
+ if (kind === 'B') {
|
||
+ isA; // false
|
||
+ }
|
||
+ if (kind === 'C') {
|
||
+ isA; // false
|
||
+ }
|
||
+ if (isA) {
|
||
+ kind; // 'A'
|
||
+ }
|
||
+ else {
|
||
+ kind; // 'B' | 'C'
|
||
+ }
|
||
+}
|
||
+
|
||
+// Repro from #35283
|
||
+
|
||
+interface A<T> { variant: 'a', value: T }
|
||
+
|
||
+interface B<T> { variant: 'b', value: Array<T> }
|
||
+
|
||
+type AB<T> = A<T> | B<T>;
|
||
+
|
||
+declare function printValue<T>(t: T): void;
|
||
+
|
||
+declare function printValueList<T>(t: Array<T>): void;
|
||
+
|
||
+function unrefined1<T>(ab: AB<T>): void {
|
||
+ const { variant, value } = ab;
|
||
+ if (variant === 'a') {
|
||
+ printValue<T>(value);
|
||
+ }
|
||
+ else {
|
||
+ printValueList<T>(value);
|
||
+ }
|
||
+}
|
||
+
|
||
+// Repro from #38020
|
||
+
|
||
+type Action3 =
|
||
+ | {type: 'add', payload: { toAdd: number } }
|
||
+ | {type: 'remove', payload: { toRemove: number } };
|
||
+
|
||
+const reducerBroken = (state: number, { type, payload }: Action3) => {
|
||
+ switch (type) {
|
||
+ case 'add':
|
||
+ return state + payload.toAdd;
|
||
+ case 'remove':
|
||
+ return state - payload.toRemove;
|
||
+ }
|
||
+}
|
||
+
|
||
+// Repro from #46143
|
||
+
|
||
+declare var it: Iterator<number>;
|
||
+const { value, done } = it.next();
|
||
+if (!done) {
|
||
+ value; // number
|
||
+}
|
||
diff --git a/tests/cases/conformance/controlFlow/typeGuardsNestedAssignments.ts b/tests/cases/conformance/controlFlow/typeGuardsNestedAssignments.ts
|
||
index 41e3ffe572..1a42e77ae0 100644
|
||
--- a/tests/cases/conformance/controlFlow/typeGuardsNestedAssignments.ts
|
||
+++ b/tests/cases/conformance/controlFlow/typeGuardsNestedAssignments.ts
|
||
@@ -44,4 +44,5 @@ let match: RegExpExecArray | null
|
||
|
||
while ((match = re.exec("xxx")) != null) {
|
||
const length = match[1].length + match[2].length
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qq4 = new Foo();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/controlFlow/typeGuardsTypeParameters.ts b/tests/cases/conformance/controlFlow/typeGuardsTypeParameters.ts
|
||
index 169dbc7a7c..708fcceab8 100644
|
||
--- a/tests/cases/conformance/controlFlow/typeGuardsTypeParameters.ts
|
||
+++ b/tests/cases/conformance/controlFlow/typeGuardsTypeParameters.ts
|
||
@@ -33,3 +33,4 @@ function fun<T>(item: { [P in keyof T]: T[P] }) {
|
||
}
|
||
}
|
||
}
|
||
+let qq6 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/declarationEmitWorkWithInlineComments.ts b/tests/cases/conformance/declarationEmit/declarationEmitWorkWithInlineComments.ts
|
||
index a5b3074a5c..20e4ef968e 100644
|
||
--- a/tests/cases/conformance/declarationEmit/declarationEmitWorkWithInlineComments.ts
|
||
+++ b/tests/cases/conformance/declarationEmit/declarationEmitWorkWithInlineComments.ts
|
||
@@ -34,4 +34,7 @@ export class Baz {
|
||
constructor(/* @internal */
|
||
public isInternal: string
|
||
) {}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+// let ff = new Foo('','','','','','','','','','')
|
||
+// let bar = new Bar('');
|
||
+// let baz = new Baz('');
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts b/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts
|
||
index 69af9c5b07..1b88b5d2bb 100644
|
||
--- a/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts
|
||
+++ b/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts
|
||
@@ -8,4 +8,5 @@ export class C {
|
||
}
|
||
|
||
export class D extends C {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qq6 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts b/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts
|
||
index 461c7d1757..d22941e2f2 100644
|
||
--- a/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts
|
||
+++ b/tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts
|
||
@@ -8,4 +8,5 @@ export class C {
|
||
}
|
||
|
||
class D extends C {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qq7 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/fs.d.ts b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/fs.d.ts
|
||
new file mode 100644
|
||
index 0000000000..fe6e6774e2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/fs.d.ts
|
||
@@ -0,0 +1,5 @@
|
||
+// @filename: node_modules/@types/node/fs.d.ts
|
||
+declare module "fs" {
|
||
+ function FSWatcher()
|
||
+ // interface FSWatcher {}
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/main.ts b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/main.ts
|
||
new file mode 100644
|
||
index 0000000000..38de3dcf37
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/main.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @filename: main.ts
|
||
+/// <reference types="node" />
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/package.json b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/package.json
|
||
new file mode 100644
|
||
index 0000000000..f93a231130
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/package.json
|
||
@@ -0,0 +1,4 @@
|
||
+{
|
||
+ "name": "@types/node",
|
||
+ "version": "1.0.0"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/typeReferenceRelatedFiles.ts b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/typeReferenceRelatedFiles.ts
|
||
new file mode 100644
|
||
index 0000000000..957e4b37af
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/declarationEmit/typeReferenceRelatedFiles/typeReferenceRelatedFiles.ts
|
||
@@ -0,0 +1,18 @@
|
||
+// @declaration: true
|
||
+// @filename: node_modules/@types/node/index.d.ts
|
||
+/// <reference path="fs.d.ts" />
|
||
+
|
||
+// @filename: node_modules/@types/node/package.json
|
||
+// {
|
||
+// "name": "@types/node",
|
||
+// "version": "1.0.0"
|
||
+// }
|
||
+// @filename: main.ts
|
||
+// / <reference types="node" />
|
||
+import { FSWatcher } from "fs";
|
||
+
|
||
+FSWatcher();
|
||
+
|
||
+export function f() {
|
||
+ // return {} as FSWatcher;
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/class/constructor/parameter/decoratorOnClassConstructorParameter5.ts b/tests/cases/conformance/decorators/class/constructor/parameter/decoratorOnClassConstructorParameter5.ts
|
||
new file mode 100644
|
||
index 0000000000..3679047895
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/constructor/parameter/decoratorOnClassConstructorParameter5.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @target: es2018
|
||
+// @experimentalDecorators: true
|
||
+// @noEmitHelpers: true
|
||
+// @noTypesAndSymbols: true
|
||
+
|
||
+// https://github.com/microsoft/TypeScript/issues/44931
|
||
+interface IFoo { }
|
||
+declare const IFoo: any;
|
||
+class BulkEditPreviewProvider {
|
||
+ static readonly Schema = 'vscode-bulkeditpreview';
|
||
+ static emptyPreview = { scheme: BulkEditPreviewProvider.Schema };
|
||
+ constructor(
|
||
+ @IFoo private readonly _modeService: IFoo,
|
||
+ ) { }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/decorators/class/decoratedBlockScopedClass1.ts b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass1.ts
|
||
new file mode 100644
|
||
index 0000000000..521dd6a31c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass1.ts
|
||
@@ -0,0 +1,16 @@
|
||
+// @target: es5
|
||
+// @experimentaldecorators: true
|
||
+// @emitDecoratorMetadata: true
|
||
+// @filename: a.ts
|
||
+
|
||
+function decorator() {
|
||
+ return (target: new (...args: any[]) => any) => {}
|
||
+}
|
||
+
|
||
+@decorator()
|
||
+class Foo {
|
||
+ public static func(): Foo {
|
||
+ return new Foo();
|
||
+ }
|
||
+}
|
||
+Foo.func();
|
||
diff --git a/tests/cases/conformance/decorators/class/decoratedBlockScopedClass2.ts b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass2.ts
|
||
new file mode 100644
|
||
index 0000000000..7d8de6894f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass2.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @target: es5
|
||
+// @experimentaldecorators: true
|
||
+// @emitDecoratorMetadata: true
|
||
+// @filename: a.ts
|
||
+
|
||
+function decorator() {
|
||
+ return (target: new (...args: any[]) => any) => {}
|
||
+}
|
||
+
|
||
+try {
|
||
+ @decorator()
|
||
+ class Foo {
|
||
+ public static func(): Foo {
|
||
+ return new Foo();
|
||
+ }
|
||
+ }
|
||
+ Foo.func();
|
||
+}
|
||
+catch (e) {}
|
||
diff --git a/tests/cases/conformance/decorators/class/decoratedBlockScopedClass3.ts b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass3.ts
|
||
new file mode 100644
|
||
index 0000000000..48eebc559f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/decoratedBlockScopedClass3.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// @target: es5
|
||
+// @experimentaldecorators: true
|
||
+// @emitDecoratorMetadata: true
|
||
+// @filename: a.ts
|
||
+
|
||
+function decorator() {
|
||
+ return (target: new (...args: any[]) => any) => {}
|
||
+}
|
||
+
|
||
+@decorator()
|
||
+class Foo {
|
||
+ public static func(): Foo {
|
||
+ return new Foo();
|
||
+ }
|
||
+}
|
||
+Foo.func();
|
||
+
|
||
+try {
|
||
+ @decorator()
|
||
+ class Foo {
|
||
+ public static func(): Foo {
|
||
+ return new Foo();
|
||
+ }
|
||
+ }
|
||
+ Foo.func();
|
||
+}
|
||
+catch (e) {}
|
||
diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod14.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod14.ts
|
||
new file mode 100644
|
||
index 0000000000..18f3df79bc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod14.ts
|
||
@@ -0,0 +1,14 @@
|
||
+// @target: esnext
|
||
+// @experimentaldecorators: true
|
||
+// @emitdecoratormetadata: true
|
||
+declare var decorator: any;
|
||
+
|
||
+class Foo {
|
||
+ private prop = () => {
|
||
+ return 0;
|
||
+ }
|
||
+ @decorator
|
||
+ foo() {
|
||
+ return 0;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod15.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod15.ts
|
||
new file mode 100644
|
||
index 0000000000..70f86b1bbe
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod15.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @target: esnext
|
||
+// @experimentaldecorators: true
|
||
+// @emitdecoratormetadata: true
|
||
+declare var decorator: any;
|
||
+
|
||
+class Foo {
|
||
+ private prop = 1
|
||
+ @decorator
|
||
+ foo() {
|
||
+ return 0;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod16.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod16.ts
|
||
new file mode 100644
|
||
index 0000000000..400d4fbe5a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod16.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @target: esnext
|
||
+// @experimentaldecorators: true
|
||
+// @emitdecoratormetadata: true
|
||
+declare var decorator: any;
|
||
+
|
||
+class Foo {
|
||
+ private prop
|
||
+ @decorator
|
||
+ foo() {
|
||
+ return 0;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod17.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod17.ts
|
||
new file mode 100644
|
||
index 0000000000..1aa25d7f32
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod17.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @target: esnext
|
||
+// @experimentaldecorators: true
|
||
+// @emitdecoratormetadata: true
|
||
+declare var decorator: any;
|
||
+
|
||
+class Foo {
|
||
+ private prop @decorator
|
||
+ foo() {
|
||
+ return 0;
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod18.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod18.ts
|
||
new file mode 100644
|
||
index 0000000000..9417c44c5b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod18.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @target: esnext
|
||
+// @experimentaldecorators: true
|
||
+// @emitdecoratormetadata: true
|
||
+declare var decorator: any;
|
||
+
|
||
+class Foo {
|
||
+ p1
|
||
+
|
||
+ @decorator()
|
||
+ p2;
|
||
+}
|
||
diff --git a/tests/cases/conformance/decorators/decoratorMetadataWithTypeOnlyImport2.ts b/tests/cases/conformance/decorators/decoratorMetadataWithTypeOnlyImport2.ts
|
||
new file mode 100644
|
||
index 0000000000..c63fcf1a16
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/decorators/decoratorMetadataWithTypeOnlyImport2.ts
|
||
@@ -0,0 +1,17 @@
|
||
+// @experimentalDecorators: true
|
||
+// @emitDecoratorMetadata: true
|
||
+
|
||
+
|
||
+// @filename: services.ts
|
||
+export namespace Services {
|
||
+ export class Service {}
|
||
+}
|
||
+
|
||
+// @filename: index.ts
|
||
+import type { Services } from './services';
|
||
+
|
||
+declare const decorator: any;
|
||
+export class Main {
|
||
+ @decorator()
|
||
+ field: Services.Service;
|
||
+}
|
||
diff --git a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts
|
||
index fe1bc56dd1..20e20e00dc 100644
|
||
--- a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts
|
||
+++ b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts
|
||
@@ -58,3 +58,14 @@ class C9 extends B9 {
|
||
super.g();
|
||
}
|
||
}
|
||
+
|
||
+let c1 = new C1();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
+let c4 = new C4();
|
||
+let c5 = new C5();
|
||
+let c6 = new C6();
|
||
+let c7 = new C7();
|
||
+let c8 = new C8();
|
||
+let c9 = new C9();
|
||
+
|
||
diff --git a/tests/cases/conformance/es2018/es2018IntlAPIs.ts b/tests/cases/conformance/es2018/es2018IntlAPIs.ts
|
||
new file mode 100644
|
||
index 0000000000..c1f6739202
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/es2018/es2018IntlAPIs.ts
|
||
@@ -0,0 +1,7 @@
|
||
+// @target: es2018
|
||
+
|
||
+// Sample from
|
||
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf
|
||
+const locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
|
||
+const options = { localeMatcher: 'lookup' } as const;
|
||
+console.log(Intl.PluralRules.supportedLocalesOf(locales, options).join(', '));
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es2020/es2020IntlAPIs.ts b/tests/cases/conformance/es2020/es2020IntlAPIs.ts
|
||
new file mode 100644
|
||
index 0000000000..464ecc01ec
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/es2020/es2020IntlAPIs.ts
|
||
@@ -0,0 +1,45 @@
|
||
+// @target: es2020
|
||
+
|
||
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation
|
||
+const count = 26254.39;
|
||
+const date = new Date("2012-05-24");
|
||
+
|
||
+function log(locale: string) {
|
||
+ console.log(
|
||
+ `${new Intl.DateTimeFormat(locale).format(date)} ${new Intl.NumberFormat(locale).format(count)}`
|
||
+ );
|
||
+}
|
||
+
|
||
+log("en-US");
|
||
+// expected output: 5/24/2012 26,254.39
|
||
+
|
||
+log("de-DE");
|
||
+// expected output: 24.5.2012 26.254,39
|
||
+
|
||
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat
|
||
+const rtf1 = new Intl.RelativeTimeFormat('en', { style: 'narrow' });
|
||
+
|
||
+console.log(rtf1.format(3, 'quarter'));
|
||
+//expected output: "in 3 qtrs."
|
||
+
|
||
+console.log(rtf1.format(-1, 'day'));
|
||
+//expected output: "1 day ago"
|
||
+
|
||
+const rtf2 = new Intl.RelativeTimeFormat('es', { numeric: 'auto' });
|
||
+
|
||
+console.log(rtf2.format(2, 'day'));
|
||
+//expected output: "pasado mañana"
|
||
+
|
||
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames
|
||
+const regionNamesInEnglish = new Intl.DisplayNames(['en'], { type: 'region' });
|
||
+const regionNamesInTraditionalChinese = new Intl.DisplayNames(['zh-Hant'], { type: 'region' });
|
||
+
|
||
+console.log(regionNamesInEnglish.of('US'));
|
||
+// expected output: "United States"
|
||
+
|
||
+console.log(regionNamesInTraditionalChinese.of('US'));
|
||
+// expected output: "美國"
|
||
+
|
||
+const locales1 = ['ban', 'id-u-co-pinyin', 'de-ID'];
|
||
+const options1 = { localeMatcher: 'lookup' } as const;
|
||
+console.log(Intl.DisplayNames.supportedLocalesOf(locales1, options1).join(', '));
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts
|
||
index 5d18229ea0..de26b4fc10 100644
|
||
--- a/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts
|
||
+++ b/tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts
|
||
@@ -2,4 +2,6 @@ class B {}
|
||
function foo() {
|
||
return {B: B};
|
||
}
|
||
-class C extends (foo()).B {}
|
||
\ No newline at end of file
|
||
+class C extends (foo()).B {}
|
||
+let qt6 = new B();
|
||
+let qt7 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing1.ts b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing1.ts
|
||
index e5d63f2e93..a872204ec7 100644
|
||
--- a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing1.ts
|
||
+++ b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing1.ts
|
||
@@ -13,3 +13,4 @@ class D extends Base {
|
||
var i = Factory.create(s);
|
||
}
|
||
}
|
||
+let qt2 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing2.ts b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing2.ts
|
||
index 1b0a0d541e..826baf9d02 100644
|
||
--- a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing2.ts
|
||
+++ b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing2.ts
|
||
@@ -7,3 +7,4 @@ class D extends Base {
|
||
super(() => { this._t }); // no error. only check when this is directly accessing in constructor
|
||
}
|
||
}
|
||
+let qt5 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing5.ts b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing5.ts
|
||
index 1782027758..10e7ca31aa 100644
|
||
--- a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing5.ts
|
||
+++ b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing5.ts
|
||
@@ -4,3 +4,4 @@
|
||
this._t; // No error
|
||
}
|
||
}
|
||
+let qt4 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing8.ts b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing8.ts
|
||
index 5742cdab84..3b55dbc70f 100644
|
||
--- a/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing8.ts
|
||
+++ b/tests/cases/conformance/es6/classDeclaration/superCallBeforeThisAccessing8.ts
|
||
@@ -10,3 +10,4 @@ class D extends Base {
|
||
}
|
||
}
|
||
}
|
||
+let qt3 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/es6/spread/arraySpreadImportHelpers.ts b/tests/cases/conformance/es6/spread/arraySpreadImportHelpers.ts
|
||
new file mode 100644
|
||
index 0000000000..ebeb117ed0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/es6/spread/arraySpreadImportHelpers.ts
|
||
@@ -0,0 +1,16 @@
|
||
+// @target: es5
|
||
+// @importHelpers: true
|
||
+// @isolatedModules: true
|
||
+// @noTypesAndSymbols: true
|
||
+// @noEmit: true
|
||
+// @filename: main.ts
|
||
+
|
||
+export {};
|
||
+const k = [1, , 2];
|
||
+const o = [3, ...k, 4];
|
||
+
|
||
+// @filename: tslib.d.ts
|
||
+// this is a pre-TS4.4 versions of emit helper, which always forced array packing
|
||
+declare module "tslib" {
|
||
+ function __spreadArray(to: any[], from: any[]): any[];
|
||
+}
|
||
diff --git a/tests/cases/conformance/es6/templates/templateStringWithCommentsInArrowFunction.ts b/tests/cases/conformance/es6/templates/templateStringWithCommentsInArrowFunction.ts
|
||
new file mode 100644
|
||
index 0000000000..c344bea1fb
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/es6/templates/templateStringWithCommentsInArrowFunction.ts
|
||
@@ -0,0 +1,14 @@
|
||
+// @removeComments: false
|
||
+
|
||
+const a = 1;
|
||
+const f1 = () =>
|
||
+ `${
|
||
+ // a
|
||
+ a
|
||
+ }a`;
|
||
+
|
||
+const f2 = () =>
|
||
+ `${
|
||
+ // a
|
||
+ a
|
||
+ }`;
|
||
diff --git a/tests/cases/conformance/expressions/asOperator/asOperatorASI.ts b/tests/cases/conformance/expressions/asOperator/asOperatorASI.ts
|
||
index a4dd44a15a..ea325aefaf 100644
|
||
--- a/tests/cases/conformance/expressions/asOperator/asOperatorASI.ts
|
||
+++ b/tests/cases/conformance/expressions/asOperator/asOperatorASI.ts
|
||
@@ -8,3 +8,4 @@ as `Hello world`; // should not error
|
||
// Example 2
|
||
var y = 20
|
||
as(Foo); // should emit
|
||
+let qw11 = new Foo();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalObjects.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalObjects.ts
|
||
index 05b8e135cb..285f41f742 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalObjects.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalObjects.ts
|
||
@@ -191,4 +191,8 @@ var r8b3 = b2 !== a2;
|
||
var r8b4 = b3 !== a3;
|
||
var r8b5 = b4 !== a4;
|
||
var r8b6 = b5 !== a5;
|
||
-var r8b7 = b6 !== a6;
|
||
\ No newline at end of file
|
||
+var r8b7 = b6 !== a6;
|
||
+let qr1 = new A1();
|
||
+let qr2 = new B1();
|
||
+let qr3 = new A2();
|
||
+let qr4 = new B2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIntersectionType.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIntersectionType.ts
|
||
new file mode 100644
|
||
index 0000000000..68900e5f91
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIntersectionType.ts
|
||
@@ -0,0 +1,5 @@
|
||
+declare let a: { a: 1 }
|
||
+a > 1;
|
||
+
|
||
+declare let b: { a: 1 } & { b: number }
|
||
+b > 1;
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.ts
|
||
index 5670cf8ef1..441748fb1a 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.ts
|
||
@@ -146,4 +146,6 @@ var r8b2 = b2 !== a2;
|
||
var r8b3 = b3 !== a3;
|
||
var r8b4 = b4 !== a4;
|
||
var r8b5 = b5 !== a5;
|
||
-var r8b6 = b6 !== a6;
|
||
\ No newline at end of file
|
||
+var r8b6 = b6 !== a6;
|
||
+let qe5 = new Derived();
|
||
+let qe6 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.ts
|
||
index 8f3d914934..3f0d1adb65 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.ts
|
||
@@ -146,4 +146,6 @@ var r8b2 = b2 !== a2;
|
||
var r8b3 = b3 !== a3;
|
||
var r8b4 = b4 !== a4;
|
||
var r8b5 = b5 !== a5;
|
||
-var r8b6 = b6 !== a6;
|
||
\ No newline at end of file
|
||
+var r8b6 = b6 !== a6;
|
||
+let qe7 = new Derived();
|
||
+let qe8 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnCallSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnCallSignature.ts
|
||
index 6b6ae79015..e60a012739 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnCallSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnCallSignature.ts
|
||
@@ -256,4 +256,5 @@ var r8b8 = b8 !== a8;
|
||
var r8b9 = b9 !== a9;
|
||
var r8b10 = b10 !== a10;
|
||
var r8b11 = b11 !== a11;
|
||
-//var r8b12 = b12 !== a12;
|
||
\ No newline at end of file
|
||
+//var r8b12 = b12 !== a12;
|
||
+let qw12 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnConstructorSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnConstructorSignature.ts
|
||
index 363192f49f..e42a1cc1c1 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnConstructorSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnConstructorSignature.ts
|
||
@@ -218,4 +218,5 @@ var r8b6 = b6 !== a6;
|
||
var r8b7 = b7 !== a7;
|
||
var r8b8 = b8 !== a8;
|
||
var r8b9 = b9 !== a9;
|
||
-//var r8b10 = b10 !== a10;
|
||
\ No newline at end of file
|
||
+//var r8b10 = b10 !== a10;
|
||
+let qe9 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnIndexSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnIndexSignature.ts
|
||
index 8246c6dd18..9154c7f806 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnIndexSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnIndexSignature.ts
|
||
@@ -104,4 +104,5 @@ var r8a1 = a4 !== b4;
|
||
var r8b1 = b1 !== a1;
|
||
var r8b1 = b2 !== a2;
|
||
var r8b1 = b3 !== a3;
|
||
-var r8b1 = b4 !== a4;
|
||
\ No newline at end of file
|
||
+var r8b1 = b4 !== a4;
|
||
+let qr5 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.ts
|
||
index da3d4131c6..59f9a78a38 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.ts
|
||
@@ -161,4 +161,5 @@ var r8b3 = b3 !== a3;
|
||
var r8b4 = b4 !== a4;
|
||
var r8b5 = b5 !== a5;
|
||
var r8b6 = b6 !== a6;
|
||
-//var r8b7 = b7 !== a7;
|
||
\ No newline at end of file
|
||
+//var r8b7 = b7 !== a7;
|
||
+let qw14 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.ts
|
||
index 5a2356eadb..05f49336bf 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.ts
|
||
@@ -161,4 +161,5 @@ var r8b3 = b3 !== a3;
|
||
var r8b4 = b4 !== a4;
|
||
var r8b5 = b5 !== a5;
|
||
var r8b6 = b6 !== a6;
|
||
-//var r8b7 = b7 !== a7;
|
||
\ No newline at end of file
|
||
+//var r8b7 = b7 !== a7;
|
||
+let qw13 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnProperty.ts b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnProperty.ts
|
||
index 6401feb11c..fb2cd09f76 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnProperty.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnProperty.ts
|
||
@@ -75,4 +75,8 @@ var rg4 = b2 === a2;
|
||
var rh1 = a1 !== b1;
|
||
var rh2 = a2 !== b2;
|
||
var rh3 = b1 !== a1;
|
||
-var rh4 = b2 !== a2;
|
||
\ No newline at end of file
|
||
+var rh4 = b2 !== a2;
|
||
+let qe1 = new Derived();
|
||
+let qe2 = new A1();
|
||
+let qe3 = new B1();
|
||
+let qe4 = new B2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithInvalidStaticToString.ts b/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithInvalidStaticToString.ts
|
||
index b99f8d7114..1399026e80 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithInvalidStaticToString.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithInvalidStaticToString.ts
|
||
@@ -19,3 +19,6 @@ declare class NormalToString {
|
||
function baz(normal: NormalToString) {
|
||
return normal instanceof NormalToString;
|
||
}
|
||
+let qr7 = new StaticToString();
|
||
+let qr8 = new StaticToNumber();
|
||
+let qr9 = new NormalToString();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsObject.ts b/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsObject.ts
|
||
index 6b88cd39f2..47a60b104b 100644
|
||
--- a/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsObject.ts
|
||
+++ b/tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsObject.ts
|
||
@@ -12,3 +12,4 @@ var r1 = a instanceof x1;
|
||
var r2 = b instanceof x2;
|
||
var r3 = c instanceof x1;
|
||
var r4 = d instanceof x1;
|
||
+let qr0 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandObjectType.ts b/tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandObjectType.ts
|
||
index 0a6a47dfbb..4e2e1e494d 100644
|
||
--- a/tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandObjectType.ts
|
||
+++ b/tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandObjectType.ts
|
||
@@ -38,3 +38,4 @@ var resultIsObject8 = (true, {});
|
||
var resultIsObject9 = (!BOOLEAN, { a: 1, b: "s" });
|
||
var resultIsObject10 = ("string", new Date());
|
||
var resultIsObject11 = (STRING.toLowerCase(), new CLASS());
|
||
+let qw10 = new CLASS();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithIdenticalBCT.ts b/tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithIdenticalBCT.ts
|
||
index 11652b023d..93bdd906c6 100644
|
||
--- a/tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithIdenticalBCT.ts
|
||
+++ b/tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithIdenticalBCT.ts
|
||
@@ -44,3 +44,6 @@ var result10: (t: X) => any = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
|
||
|
||
//Expr1 and Expr2 are literals
|
||
var result11: any = true ? 1 : 'string';
|
||
+
|
||
+let qq1 = new A();
|
||
+let qq0 = new B();
|
||
diff --git a/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping1.ts b/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping1.ts
|
||
index 7bcde9a695..fc8bde2595 100644
|
||
--- a/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping1.ts
|
||
+++ b/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping1.ts
|
||
@@ -9,3 +9,5 @@ class B extends A<number, string> {
|
||
// Ensure 'value' is of type 'number (and not '{}') by using its 'toExponential()' method.
|
||
constructor() { super(value => String(value.toExponential())); }
|
||
}
|
||
+
|
||
+let qr17 = new B();
|
||
diff --git a/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping3.ts b/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping3.ts
|
||
index 760337f3ef..6eac51e440 100644
|
||
--- a/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping3.ts
|
||
+++ b/tests/cases/conformance/expressions/contextualTyping/superCallParameterContextualTyping3.ts
|
||
@@ -28,4 +28,5 @@ class C extends CBase<string> {
|
||
}
|
||
});
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qt1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/functionCalls/callWithSpread.ts b/tests/cases/conformance/expressions/functionCalls/callWithSpread.ts
|
||
index b1e2ee7578..3ba8aa488a 100644
|
||
--- a/tests/cases/conformance/expressions/functionCalls/callWithSpread.ts
|
||
+++ b/tests/cases/conformance/expressions/functionCalls/callWithSpread.ts
|
||
@@ -55,3 +55,4 @@ class D extends C {
|
||
super.foo(1, 2, ...a);
|
||
}
|
||
}
|
||
+let qr13 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/functions/arrowFunctionExpressions.ts b/tests/cases/conformance/expressions/functions/arrowFunctionExpressions.ts
|
||
index 707ef02de8..304d6792dc 100644
|
||
--- a/tests/cases/conformance/expressions/functions/arrowFunctionExpressions.ts
|
||
+++ b/tests/cases/conformance/expressions/functions/arrowFunctionExpressions.ts
|
||
@@ -96,3 +96,4 @@ function tryCatchFn() {
|
||
var m = () => this + '';
|
||
}
|
||
}
|
||
+let qr14 = new MyClass();
|
||
diff --git a/tests/cases/conformance/expressions/newOperator/newOperatorConformance.ts b/tests/cases/conformance/expressions/newOperator/newOperatorConformance.ts
|
||
index b50751c7ae..051e4e3c3e 100644
|
||
--- a/tests/cases/conformance/expressions/newOperator/newOperatorConformance.ts
|
||
+++ b/tests/cases/conformance/expressions/newOperator/newOperatorConformance.ts
|
||
@@ -60,3 +60,4 @@ var t: any;
|
||
var nested = new (new (new nestedCtor())())();
|
||
var n = new nested();
|
||
var n = new nested();
|
||
+let aa1 = new C1(null,null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/superCalls/superCalls.ts b/tests/cases/conformance/expressions/superCalls/superCalls.ts
|
||
index fdebc85906..da0fe9656b 100644
|
||
--- a/tests/cases/conformance/expressions/superCalls/superCalls.ts
|
||
+++ b/tests/cases/conformance/expressions/superCalls/superCalls.ts
|
||
@@ -27,3 +27,5 @@ class OtherDerived extends OtherBase {
|
||
super();
|
||
}
|
||
}
|
||
+let qr15 = new Derived(null);
|
||
+let qr16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/thisKeyword/typeOfThisGeneral.ts b/tests/cases/conformance/expressions/thisKeyword/typeOfThisGeneral.ts
|
||
new file mode 100644
|
||
index 0000000000..99d6a50b00
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/expressions/thisKeyword/typeOfThisGeneral.ts
|
||
@@ -0,0 +1,178 @@
|
||
+// @target: esnext
|
||
+// @useDefineForClassFields: false
|
||
+class MyTestClass {
|
||
+ private canary: number;
|
||
+ static staticCanary: number;
|
||
+
|
||
+ constructor() {
|
||
+ //type of 'this' in constructor body is the class instance type
|
||
+ var p = this.canary;
|
||
+ var p: number;
|
||
+ this.canary = 3;
|
||
+ }
|
||
+
|
||
+ //type of 'this' in member function param list is the class instance type
|
||
+ memberFunc(t = this) {
|
||
+ var t: MyTestClass;
|
||
+
|
||
+ //type of 'this' in member function body is the class instance type
|
||
+ var p = this;
|
||
+ var p: MyTestClass;
|
||
+ }
|
||
+
|
||
+ //type of 'this' in member accessor(get and set) body is the class instance type
|
||
+ get prop() {
|
||
+ var p = this;
|
||
+ var p: MyTestClass;
|
||
+ return this;
|
||
+ }
|
||
+ set prop(v) {
|
||
+ var p = this;
|
||
+ var p: MyTestClass;
|
||
+ p = v;
|
||
+ v = p;
|
||
+ }
|
||
+
|
||
+ someFunc = () => {
|
||
+ //type of 'this' in member variable initializer is the class instance type
|
||
+ var t = this;
|
||
+ var t: MyTestClass;
|
||
+ };
|
||
+
|
||
+ //type of 'this' in static function param list is constructor function type
|
||
+ static staticFn(t = this) {
|
||
+ var t: typeof MyTestClass;
|
||
+ var t = MyTestClass;
|
||
+ t.staticCanary;
|
||
+
|
||
+ //type of 'this' in static function body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyTestClass;
|
||
+ var p = MyTestClass;
|
||
+ p.staticCanary;
|
||
+ }
|
||
+
|
||
+ static get staticProp() {
|
||
+ //type of 'this' in static accessor body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyTestClass;
|
||
+ var p = MyTestClass;
|
||
+ p.staticCanary;
|
||
+ return this;
|
||
+ }
|
||
+ static set staticProp(v: typeof MyTestClass) {
|
||
+ //type of 'this' in static accessor body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyTestClass;
|
||
+ var p = MyTestClass;
|
||
+ p.staticCanary;
|
||
+ }
|
||
+}
|
||
+
|
||
+class MyGenericTestClass<T, U> {
|
||
+ private canary: number;
|
||
+ static staticCanary: number;
|
||
+
|
||
+ constructor() {
|
||
+ //type of 'this' in constructor body is the class instance type
|
||
+ var p = this.canary;
|
||
+ var p: number;
|
||
+ this.canary = 3;
|
||
+ }
|
||
+
|
||
+ //type of 'this' in member function param list is the class instance type
|
||
+ memberFunc(t = this) {
|
||
+ var t: MyGenericTestClass<T, U>;
|
||
+
|
||
+ //type of 'this' in member function body is the class instance type
|
||
+ var p = this;
|
||
+ var p: MyGenericTestClass<T, U>;
|
||
+ }
|
||
+
|
||
+ //type of 'this' in member accessor(get and set) body is the class instance type
|
||
+ get prop() {
|
||
+ var p = this;
|
||
+ var p: MyGenericTestClass<T, U>;
|
||
+ return this;
|
||
+ }
|
||
+ set prop(v) {
|
||
+ var p = this;
|
||
+ var p: MyGenericTestClass<T, U>;
|
||
+ p = v;
|
||
+ v = p;
|
||
+ }
|
||
+
|
||
+ someFunc = () => {
|
||
+ //type of 'this' in member variable initializer is the class instance type
|
||
+ var t = this;
|
||
+ var t: MyGenericTestClass<T, U>;
|
||
+ };
|
||
+
|
||
+ //type of 'this' in static function param list is constructor function type
|
||
+ static staticFn(t = this) {
|
||
+ var t: typeof MyGenericTestClass;
|
||
+ var t = MyGenericTestClass;
|
||
+ t.staticCanary;
|
||
+
|
||
+ //type of 'this' in static function body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyGenericTestClass;
|
||
+ var p = MyGenericTestClass;
|
||
+ p.staticCanary;
|
||
+ }
|
||
+
|
||
+ static get staticProp() {
|
||
+ //type of 'this' in static accessor body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyGenericTestClass;
|
||
+ var p = MyGenericTestClass;
|
||
+ p.staticCanary;
|
||
+ return this;
|
||
+ }
|
||
+ static set staticProp(v: typeof MyGenericTestClass) {
|
||
+ //type of 'this' in static accessor body is constructor function type
|
||
+ var p = this;
|
||
+ var p: typeof MyGenericTestClass;
|
||
+ var p = MyGenericTestClass;
|
||
+ p.staticCanary;
|
||
+ }
|
||
+}
|
||
+
|
||
+//type of 'this' in a function declaration param list is Any
|
||
+function fn(s = this) {
|
||
+ var s: any;
|
||
+ s.spaaaaaaace = 4;
|
||
+
|
||
+ //type of 'this' in a function declaration body is Any
|
||
+ var t: any;
|
||
+ var t = this;
|
||
+ this.spaaaaace = 4;
|
||
+}
|
||
+
|
||
+//type of 'this' in a function expression param list list is Any
|
||
+var q1 = function (s = this) {
|
||
+ var s: any;
|
||
+ s.spaaaaaaace = 4;
|
||
+
|
||
+ //type of 'this' in a function expression body is Any
|
||
+ var t: any;
|
||
+ var t = this;
|
||
+ this.spaaaaace = 4;
|
||
+}
|
||
+
|
||
+//type of 'this' in a fat arrow expression param list is typeof globalThis
|
||
+var q2 = (s = this) => {
|
||
+ var s: typeof globalThis;
|
||
+ s.spaaaaaaace = 4;
|
||
+
|
||
+ //type of 'this' in a fat arrow expression body is typeof globalThis
|
||
+ var t: typeof globalThis;
|
||
+ var t = this;
|
||
+ this.spaaaaace = 4;
|
||
+}
|
||
+
|
||
+//type of 'this' in global module is GlobalThis
|
||
+var t: typeof globalThis;
|
||
+var t = this;
|
||
+this.spaaaaace = 4;
|
||
+
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/TypeGuardWithArrayUnion.ts b/tests/cases/conformance/expressions/typeGuards/TypeGuardWithArrayUnion.ts
|
||
index 8884754b48..c6378e0dc3 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/TypeGuardWithArrayUnion.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/TypeGuardWithArrayUnion.ts
|
||
@@ -7,3 +7,4 @@ function saySize(message: Message | Message[]) {
|
||
return message.length; // Should have type Message[] here
|
||
}
|
||
}
|
||
+let rr5 = new Message();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardFunction.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardFunction.ts
|
||
index 57d56ccc3b..0f531ea811 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardFunction.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardFunction.ts
|
||
@@ -80,4 +80,8 @@ acceptingTypeGuardFunction(isA);
|
||
|
||
// Binary expressions
|
||
let union2: C | B;
|
||
-let union3: boolean | B = isA(union2) || union2;
|
||
\ No newline at end of file
|
||
+let union3: boolean | B = isA(union2) || union2;
|
||
+
|
||
+let ee2 = new B();
|
||
+let ee3 = new C();
|
||
+let ee4 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardFunctionGenerics.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardFunctionGenerics.ts
|
||
index d0e108b573..3511cc54b1 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardFunctionGenerics.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardFunctionGenerics.ts
|
||
@@ -30,4 +30,6 @@ let test2: B = funC(isB);
|
||
if (funD(isC, a)) {
|
||
a.propC;
|
||
}
|
||
-let test3: B = funE(isB, 1);
|
||
\ No newline at end of file
|
||
+let test3: B = funE(isB, 1);
|
||
+let qw7 = new B();
|
||
+let qw8 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1AndExpr2.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1AndExpr2.ts
|
||
index 1ed8e6ebb0..e14dd79116 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1AndExpr2.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1AndExpr2.ts
|
||
@@ -43,4 +43,5 @@ if (typeof strOrNumOrBool !== "string" && numOrBool !== strOrNumOrBool) {
|
||
}
|
||
else {
|
||
var r3: string | number | boolean = strOrNumOrBool; // string | number | boolean
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let rr1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1OrExpr2.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1OrExpr2.ts
|
||
index 1d72f35828..3411e32bcf 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1OrExpr2.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormExpr1OrExpr2.ts
|
||
@@ -43,4 +43,5 @@ if (typeof strOrNumOrBool === "string" || numOrBool !== strOrNumOrBool) {
|
||
}
|
||
else {
|
||
numOrBool = strOrNumOrBool; // number | boolean
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qw2 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormInstanceOf.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormInstanceOf.ts
|
||
index 31514fca74..db3d488209 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormInstanceOf.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormInstanceOf.ts
|
||
@@ -1,25 +1,25 @@
|
||
-// A type guard of the form x instanceof C, where C is of a subtype of the global type 'Function'
|
||
-// and C has a property named 'prototype'
|
||
-// - when true, narrows the type of x to the type of the 'prototype' property in C provided
|
||
-// it is a subtype of the type of x, or
|
||
-// - when false, has no effect on the type of x.
|
||
-
|
||
-class C1 {
|
||
- p1: string;
|
||
-}
|
||
-class C2 {
|
||
- p2: number;
|
||
-}
|
||
-class D1 extends C1 {
|
||
- p3: number;
|
||
-}
|
||
+// A type guard of the form x instanceof C, where C is of a subtype of the global type 'Function'
|
||
+// and C has a property named 'prototype'
|
||
+// - when true, narrows the type of x to the type of the 'prototype' property in C provided
|
||
+// it is a subtype of the type of x, or
|
||
+// - when false, has no effect on the type of x.
|
||
+
|
||
+class C1 {
|
||
+ p1: string;
|
||
+}
|
||
+class C2 {
|
||
+ p2: number;
|
||
+}
|
||
+class D1 extends C1 {
|
||
+ p3: number;
|
||
+}
|
||
class C3 {
|
||
p4: number;
|
||
}
|
||
-var str: string;
|
||
-var num: number;
|
||
-var strOrNum: string | number;
|
||
-
|
||
+var str: string;
|
||
+var num: number;
|
||
+var strOrNum: string | number;
|
||
+
|
||
var ctor1: C1 | C2;
|
||
str = ctor1 instanceof C1 && ctor1.p1; // C1
|
||
num = ctor1 instanceof C2 && ctor1.p2; // C2
|
||
@@ -31,7 +31,7 @@ num = ctor2 instanceof C2 && ctor2.p2; // C2
|
||
num = ctor2 instanceof D1 && ctor2.p3; // D1
|
||
str = ctor2 instanceof D1 && ctor2.p1; // D1
|
||
var r2: D1 | C2 = ctor2 instanceof C1 && ctor2; // C2 | D1
|
||
-
|
||
+
|
||
var ctor3: C1 | C2;
|
||
if (ctor3 instanceof C1) {
|
||
ctor3.p1; // C1
|
||
@@ -64,4 +64,7 @@ if (ctor6 instanceof C1 || ctor6 instanceof C2) {
|
||
}
|
||
else {
|
||
ctor6.p4; // C3
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qw4 = new C2();
|
||
+let qw3 = new D1();
|
||
+let qw5 = new C3();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormIsType.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormIsType.ts
|
||
index 9f5ca611ee..e0953773d5 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormIsType.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormIsType.ts
|
||
@@ -34,4 +34,7 @@ var c2Ord1: C2 | D1;
|
||
num = isC2(c2Ord1) && c2Ord1.p2; // C2
|
||
num = isD1(c2Ord1) && c2Ord1.p3; // D1
|
||
str = isD1(c2Ord1) && c2Ord1.p1; // D1
|
||
-var r2: C2 | D1 = isC1(c2Ord1) && c2Ord1; // C2 | D1
|
||
\ No newline at end of file
|
||
+var r2: C2 | D1 = isC1(c2Ord1) && c2Ord1; // C2 | D1
|
||
+
|
||
+let rr2 = new C2();
|
||
+let rr3 = new D1();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfBoolean.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfBoolean.ts
|
||
index 37651071b7..610f0da2c8 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfBoolean.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfBoolean.ts
|
||
@@ -83,3 +83,4 @@ if (typeof strOrNum !== "boolean") {
|
||
else {
|
||
let z2: {} = strOrNum; // {}
|
||
}
|
||
+let qw9 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfNumber.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfNumber.ts
|
||
index b4cdf81660..f00736781f 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfNumber.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfNumber.ts
|
||
@@ -82,3 +82,4 @@ if (typeof strOrBool !== "number") {
|
||
else {
|
||
let y2: {} = strOrBool; // {}
|
||
}
|
||
+let ee6 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfString.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfString.ts
|
||
index f742124708..a20093f868 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfString.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFormTypeOfString.ts
|
||
@@ -82,3 +82,4 @@ if (typeof numOrBool !== "string") {
|
||
else {
|
||
let x2: {} = numOrBool; // {}
|
||
}
|
||
+let rr4 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFromPropNameInUnionType.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFromPropNameInUnionType.ts
|
||
index e1256e4288..ceee99f7e2 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardOfFromPropNameInUnionType.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardOfFromPropNameInUnionType.ts
|
||
@@ -103,3 +103,12 @@ function f(i: Indexed) {
|
||
}
|
||
return "c" in i && i.c;
|
||
}
|
||
+let tt1 = new A();
|
||
+let tt2 = new B();
|
||
+let tt3 = new C();
|
||
+let tt4 = new D();
|
||
+let tt5 = new AWithOptionalProp();
|
||
+let tt6 = new BWithOptionalProp();
|
||
+let tt7 = new ClassWithUnionProp();
|
||
+let tt8 = new InMemberOfClass();
|
||
+let tt9 = new SelfAssert();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassAccessors.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassAccessors.ts
|
||
index 04b9a6a394..044131068a 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassAccessors.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassAccessors.ts
|
||
@@ -101,3 +101,4 @@ class ClassWithAccessors {
|
||
num = typeof var2 === "string" && var2.length; // string
|
||
}
|
||
}
|
||
+let ee1 = new ClassWithAccessors();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassMethods.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassMethods.ts
|
||
index cb1327027c..7bb36dfefe 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassMethods.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardsInClassMethods.ts
|
||
@@ -65,3 +65,4 @@ class C1 {
|
||
num = typeof param === "string" && param.length; // string
|
||
}
|
||
}
|
||
+let qw1 = new C1(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardsInProperties.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardsInProperties.ts
|
||
index bffe8d3d1b..b7fd3f9c34 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardsInProperties.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardsInProperties.ts
|
||
@@ -24,4 +24,5 @@ strOrNum = typeof c1.pp3 === "string" && c1.pp3; // string | number
|
||
var obj1: {
|
||
x: string | number;
|
||
};
|
||
-strOrNum = typeof obj1.x === "string" && obj1.x; // string | number
|
||
\ No newline at end of file
|
||
+strOrNum = typeof obj1.x === "string" && obj1.x; // string | number
|
||
+let ee5 = new C1();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardsOnClassProperty.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardsOnClassProperty.ts
|
||
index 2c26b10c6a..574f2af39c 100644
|
||
--- a/tests/cases/conformance/expressions/typeGuards/typeGuardsOnClassProperty.ts
|
||
+++ b/tests/cases/conformance/expressions/typeGuards/typeGuardsOnClassProperty.ts
|
||
@@ -25,4 +25,5 @@ var o: {
|
||
|
||
if (typeof o.prop1 === "string" && o.prop1.toLowerCase()) {}
|
||
var prop1 = o.prop1;
|
||
-if (typeof prop1 === "string" && prop1.toLocaleLowerCase()) { }
|
||
\ No newline at end of file
|
||
+if (typeof prop1 === "string" && prop1.toLocaleLowerCase()) { }
|
||
+let qw6 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithNumberType.ts b/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithNumberType.ts
|
||
index b41a114503..87e1d09bea 100644
|
||
--- a/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithNumberType.ts
|
||
+++ b/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithNumberType.ts
|
||
@@ -43,4 +43,5 @@ var ResultIsNumber13 = ~~~(NUMBER + NUMBER);
|
||
~foo();
|
||
~objA.a;
|
||
~M.n;
|
||
-~objA.a, M.n;
|
||
\ No newline at end of file
|
||
+~objA.a, M.n;
|
||
+let qr11 = new A();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithStringType.ts b/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithStringType.ts
|
||
index 0b60c73ef9..4495309b10 100644
|
||
--- a/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithStringType.ts
|
||
+++ b/tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithStringType.ts
|
||
@@ -42,4 +42,5 @@ var ResultIsNumber14 = ~~~(STRING + STRING);
|
||
~STRING;
|
||
~STRING1;
|
||
~foo();
|
||
-~objA.a,M.n;
|
||
\ No newline at end of file
|
||
+~objA.a,M.n;
|
||
+let qr12 = new A();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/exportNonVisibleType.ts b/tests/cases/conformance/externalModules/exportNonVisibleType.ts
|
||
index 4f4722fd86..cc56bd2f0b 100644
|
||
--- a/tests/cases/conformance/externalModules/exportNonVisibleType.ts
|
||
+++ b/tests/cases/conformance/externalModules/exportNonVisibleType.ts
|
||
@@ -31,3 +31,4 @@ class C1 {
|
||
}
|
||
|
||
export = C1; // Should work, private type I1 of visible class C1 only used in private member m1.
|
||
+let qt8 = new C1();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension1.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension1.ts
|
||
new file mode 100644
|
||
index 0000000000..83e86fc6c6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension1.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/foo.mts
|
||
+export function foo() {
|
||
+ return "";
|
||
+}
|
||
+
|
||
+// @filename: /src/bar.mts
|
||
+// Extensionless relative path ES import in an ES module
|
||
+import { foo } from "./foo"; // should error, suggest adding ".mjs"
|
||
+import { baz } from "./baz"; // should error, ask for extension, no extension suggestion
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension2.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension2.ts
|
||
new file mode 100644
|
||
index 0000000000..0051e17401
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension2.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/buzz.mts
|
||
+// Extensionless relative path cjs import in an ES module
|
||
+import foo = require("./foo"); // should error, should not ask for extension
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension3.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension3.ts
|
||
new file mode 100644
|
||
index 0000000000..2ec3ff1ad0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension3.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @moduleResolution: nodenext
|
||
+// @module: nodenext
|
||
+// @jsx: preserve
|
||
+
|
||
+// @filename: /src/foo.tsx
|
||
+export function foo() {
|
||
+ return "";
|
||
+}
|
||
+
|
||
+// @filename: /src/bar.mts
|
||
+// Extensionless relative path ES import in an ES module
|
||
+import { foo } from "./foo"; // should error, suggest adding ".jsx"
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension4.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension4.ts
|
||
new file mode 100644
|
||
index 0000000000..c1eab70f92
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension4.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @moduleResolution: nodenext
|
||
+// @module: nodenext
|
||
+// @jsx: react
|
||
+
|
||
+// @filename: /src/foo.tsx
|
||
+export function foo() {
|
||
+ return "";
|
||
+}
|
||
+
|
||
+// @filename: /src/bar.mts
|
||
+// Extensionless relative path ES import in an ES module
|
||
+import { foo } from "./foo"; // should error, suggest adding ".js"
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension5.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension5.ts
|
||
new file mode 100644
|
||
index 0000000000..5053a242cd
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension5.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/buzz.mts
|
||
+// Extensionless relative path dynamic import in an ES module
|
||
+import("./foo").then(x => x); // should error, ask for extension
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension6.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension6.ts
|
||
new file mode 100644
|
||
index 0000000000..2a6ef2645d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension6.ts
|
||
@@ -0,0 +1,8 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/bar.cts
|
||
+// Extensionless relative path import statement in a cjs module
|
||
+// Import statements are not allowed in cjs files,
|
||
+// but other errors should not assume that they are allowed
|
||
+import { foo } from "./foo"; // should error, should not ask for extension
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension7.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension7.ts
|
||
new file mode 100644
|
||
index 0000000000..3b10dd6e48
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension7.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/bar.cts
|
||
+// Extensionless relative path cjs import in a cjs module
|
||
+import foo = require("./foo"); // should error, should not ask for extension
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension8.ts b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension8.ts
|
||
new file mode 100644
|
||
index 0000000000..fef17b3aa1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/moduleResolutionWithoutExtension8.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @moduleResolution: node12
|
||
+// @module: node12
|
||
+
|
||
+// @filename: /src/bar.cts
|
||
+// Extensionless relative path dynamic import in a cjs module
|
||
+import("./foo").then(x => x); // should error, ask for extension
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/exportSpecifiers.ts b/tests/cases/conformance/externalModules/typeOnly/exportSpecifiers.ts
|
||
new file mode 100644
|
||
index 0000000000..c8c584f66d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/exportSpecifiers.ts
|
||
@@ -0,0 +1,21 @@
|
||
+// @module: esnext
|
||
+// @declaration: true
|
||
+
|
||
+// @Filename: /imports.ts
|
||
+import { type, as, something, foo, bar } from "./exports.js";
|
||
+type;
|
||
+as; // Error (used in emitting position)
|
||
+something; // Error (used in emitting position)
|
||
+foo; // Error (used in emitting position)
|
||
+bar; // Error (used in emitting position)
|
||
+
|
||
+// @Filename: /exports.ts
|
||
+const type = 0;
|
||
+const as = 0;
|
||
+const something = 0;
|
||
+export { type };
|
||
+export { type as };
|
||
+export { type something };
|
||
+export { type type as foo };
|
||
+export { type as as bar };
|
||
+export type { type something as whatever }; // Error
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/a.ts b/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/a.ts
|
||
new file mode 100644
|
||
index 0000000000..3e949a0611
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/a.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @Filename: /a.ts
|
||
+export default class A {}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/importDefaultNamedType.ts b/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/importDefaultNamedType.ts
|
||
new file mode 100644
|
||
index 0000000000..3bb8cdfce2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/importDefaultNamedType/importDefaultNamedType.ts
|
||
@@ -0,0 +1,5 @@
|
||
+
|
||
+
|
||
+// @Filename: /b.ts
|
||
+import type from './a';
|
||
+type;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/importSpecifiers1.ts b/tests/cases/conformance/externalModules/typeOnly/importSpecifiers1.ts
|
||
new file mode 100644
|
||
index 0000000000..348784befd
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/importSpecifiers1.ts
|
||
@@ -0,0 +1,46 @@
|
||
+// @module: esnext
|
||
+// @declaration: true
|
||
+
|
||
+// @Filename: /mod.ts
|
||
+export const as = 0;
|
||
+export const type = 0;
|
||
+export const something = 0;
|
||
+
|
||
+// @Filename: /a.ts
|
||
+import { type } from "./mod.js";
|
||
+import { type as } from "./mod.js";
|
||
+type;
|
||
+as; // Error (used in emitting position)
|
||
+
|
||
+// @Filename: /b.ts
|
||
+import { type as as } from "./mod.js";
|
||
+type; // Error (cannot resolve name)
|
||
+as;
|
||
+
|
||
+// @Filename: /c.ts
|
||
+import { type as as as } from "./mod.js";
|
||
+type; // Error (cannot resolve name)
|
||
+as; // Error (used in emitting position)
|
||
+
|
||
+// @Filename: /d.ts
|
||
+import { type as as as as } from "./mod.js"; // Error
|
||
+
|
||
+// @Filename: /e.ts
|
||
+import { type type as as } from "./mod.js";
|
||
+import { type as type } from "./mod.js";
|
||
+type;
|
||
+as; // Error (used in emitting position)
|
||
+
|
||
+// @Filename: /f.ts
|
||
+import { type import } from "./mod.js"; // Error
|
||
+import { type as export } from "./mod.js"; // Error
|
||
+import { type as as export } from "./mod.js"; // Error
|
||
+import { type something } from "./mod.js";
|
||
+import { type something as s } from "./mod.js";
|
||
+type; // Error (cannot resolve name)
|
||
+as; // Error (cannot resolve name)
|
||
+something; // Error (used in emitting position)
|
||
+s; // Error (used in emitting position)
|
||
+
|
||
+// @Filename: /g.ts
|
||
+import type { type something } from "./mod.js"; // Error
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/preserveValueImports.ts b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports.ts
|
||
new file mode 100644
|
||
index 0000000000..66326cb98b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports.ts
|
||
@@ -0,0 +1,28 @@
|
||
+// @preserveValueImports: true
|
||
+// @isolatedModules: true,false
|
||
+// @module: esnext
|
||
+
|
||
+// @Filename: a.ts
|
||
+export default {};
|
||
+export const b = 0;
|
||
+export const c = 1;
|
||
+export interface D {}
|
||
+
|
||
+// @Filename: b.ts
|
||
+import a, { b, c, D } from "./a";
|
||
+
|
||
+// @Filename: c.ts
|
||
+import * as a from "./a";
|
||
+
|
||
+// @Filename: d.ts
|
||
+export = {};
|
||
+
|
||
+// @Filename: e.ts
|
||
+import D = require("./d");
|
||
+import DD = require("./d");
|
||
+DD;
|
||
+
|
||
+// @Filename: f.ts
|
||
+import type a from "./a";
|
||
+import { b, c } from "./a";
|
||
+b;
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_errors.ts b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_errors.ts
|
||
new file mode 100644
|
||
index 0000000000..fc2a3612e7
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_errors.ts
|
||
@@ -0,0 +1,47 @@
|
||
+// @preserveValueImports: true
|
||
+// @isolatedModules: true,false
|
||
+// @module: esnext
|
||
+
|
||
+// @Filename: a.ts
|
||
+export type A = {};
|
||
+export type { A as default };
|
||
+
|
||
+// @Filename: b.ts
|
||
+class B {};
|
||
+export type { B, B as default };
|
||
+
|
||
+// @Filename: c.ts
|
||
+import DefaultA from "./a";
|
||
+import { A } from "./a";
|
||
+import DefaultB from "./b";
|
||
+import { B } from "./b";
|
||
+
|
||
+// @Filename: c.fixed.ts
|
||
+import type DefaultA from "./a";
|
||
+import type { A } from "./a";
|
||
+import type DefaultB from "./b";
|
||
+import type { B } from "./b";
|
||
+
|
||
+// @Filename: d.ts
|
||
+export { A as AA } from "./a";
|
||
+export { B as BB } from "./b";
|
||
+
|
||
+// @Filename: d.fixed.ts
|
||
+export type { A as AA } from "./a";
|
||
+export type { B as BB } from "./b";
|
||
+
|
||
+// @Filename: e.ts
|
||
+import { AA, BB } from "./d";
|
||
+
|
||
+// @Filename: e.fixed.ts
|
||
+import type { AA, BB } from "./d";
|
||
+
|
||
+// @Filename: f.ts
|
||
+import type { A } from "./a";
|
||
+import type { B } from "./b";
|
||
+export { A, B as BB };
|
||
+
|
||
+// @Filename: f.fixed.ts
|
||
+import type { A } from "./a";
|
||
+import type { B } from "./b";
|
||
+export type { A, B as BB };
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_importsNotUsedAsValues.ts b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_importsNotUsedAsValues.ts
|
||
new file mode 100644
|
||
index 0000000000..4797a30727
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_importsNotUsedAsValues.ts
|
||
@@ -0,0 +1,14 @@
|
||
+// @preserveValueImports: true
|
||
+// @importsNotUsedAsValues: preserve
|
||
+// @module: esnext
|
||
+
|
||
+// @Filename: /mod.ts
|
||
+export type A = unknown;
|
||
+export type B = never;
|
||
+export type C = any;
|
||
+
|
||
+// @Filename: /index.ts
|
||
+import { type A, type B, type C } from "./mod.js";
|
||
+
|
||
+// @Filename: /reexport.ts
|
||
+export { type A, type B, type C } from "./mod.js";
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_mixedImports.ts b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_mixedImports.ts
|
||
new file mode 100644
|
||
index 0000000000..85cbae30f7
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_mixedImports.ts
|
||
@@ -0,0 +1,13 @@
|
||
+// @preserveValueImports: true
|
||
+// @isolatedModules: true
|
||
+// @module: es2015
|
||
+
|
||
+// @Filename: /exports.ts
|
||
+export function Component() {}
|
||
+export interface ComponentProps {}
|
||
+
|
||
+// @Filename: /index.ts
|
||
+import { Component, ComponentProps } from "./exports.js";
|
||
+
|
||
+// @Filename: /index.fixed.ts
|
||
+import { Component, type ComponentProps } from "./exports.js";
|
||
diff --git a/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_module.ts b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_module.ts
|
||
new file mode 100644
|
||
index 0000000000..27f78f707c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/externalModules/typeOnly/preserveValueImports_module.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @preserveValueImports: true
|
||
+// @module: amd,system,commonjs,es2015
|
||
+// @noTypesAndSymbols: true
|
||
+export {};
|
||
diff --git a/tests/cases/conformance/importAssertion/importAssertion1.ts b/tests/cases/conformance/importAssertion/importAssertion1.ts
|
||
new file mode 100644
|
||
index 0000000000..b547158cf1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/importAssertion/importAssertion1.ts
|
||
@@ -0,0 +1,37 @@
|
||
+// @declaration: true
|
||
+// @target: es2015
|
||
+// @module: es2015, commonjs, esnext
|
||
+
|
||
+// @filename: 0.ts
|
||
+export const a = 1;
|
||
+export const b = 2;
|
||
+
|
||
+// @filename: 1.ts
|
||
+import './0' assert { type: "json" }
|
||
+import { a, b } from './0' assert { "type": "json" }
|
||
+import * as foo from './0' assert { type: "json" }
|
||
+a;
|
||
+b;
|
||
+foo.a;
|
||
+foo.b;
|
||
+
|
||
+// @filename: 2.ts
|
||
+import { a, b } from './0' assert {}
|
||
+import { a as c, b as d } from './0' assert { a: "a", b: "b", c: "c" }
|
||
+a;
|
||
+b;
|
||
+c;
|
||
+d;
|
||
+
|
||
+// @filename: 3.ts
|
||
+const a = import('./0')
|
||
+const b = import('./0', { assert: { type: "json" } })
|
||
+const c = import('./0', { assert: { type: "json", ttype: "typo" } })
|
||
+const d = import('./0', { assert: {} })
|
||
+const dd = import('./0', {})
|
||
+declare function foo(): any;
|
||
+const e = import('./0', foo())
|
||
+const f = import()
|
||
+const g = import('./0', {}, {})
|
||
+const h = import('./0', { assert: { type: "json" }},)
|
||
+
|
||
diff --git a/tests/cases/conformance/importAssertion/importAssertion2.ts b/tests/cases/conformance/importAssertion/importAssertion2.ts
|
||
new file mode 100644
|
||
index 0000000000..42a26af43e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/importAssertion/importAssertion2.ts
|
||
@@ -0,0 +1,17 @@
|
||
+// @declaration: true
|
||
+// @target: es2015
|
||
+// @module: es2015, commonjs, esnext
|
||
+
|
||
+// @filename: 0.ts
|
||
+export const a = 1;
|
||
+export const b = 2;
|
||
+
|
||
+// @filename: 1.ts
|
||
+export {} from './0' assert { type: "json" }
|
||
+export { a, b } from './0' assert { type: "json" }
|
||
+export * from './0' assert { type: "json" }
|
||
+export * as ns from './0' assert { type: "json" }
|
||
+
|
||
+// @filename: 2.ts
|
||
+export { a, b } from './0' assert {}
|
||
+export { a as c, b as d } from './0' assert { a: "a", b: "b", c: "c" }
|
||
diff --git a/tests/cases/conformance/importAssertion/importAssertion3.ts b/tests/cases/conformance/importAssertion/importAssertion3.ts
|
||
new file mode 100644
|
||
index 0000000000..28479378b1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/importAssertion/importAssertion3.ts
|
||
@@ -0,0 +1,15 @@
|
||
+// @declaration: true
|
||
+// @target: es2015
|
||
+// @module: es2015, esnext
|
||
+
|
||
+// @filename: 0.ts
|
||
+export interface I { }
|
||
+
|
||
+// @filename: 1.ts
|
||
+export type {} from './0' assert { type: "json" }
|
||
+export type { I } from './0' assert { type: "json" }
|
||
+
|
||
+// @filename: 2.ts
|
||
+import type { I } from './0' assert { type: "json" }
|
||
+import type * as foo from './0' assert { type: "json" }
|
||
+
|
||
diff --git a/tests/cases/conformance/importAssertion/importAssertion4.ts b/tests/cases/conformance/importAssertion/importAssertion4.ts
|
||
new file mode 100644
|
||
index 0000000000..242d7dd375
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/importAssertion/importAssertion4.ts
|
||
@@ -0,0 +1 @@
|
||
+import * as f from "./first" assert
|
||
diff --git a/tests/cases/conformance/importAssertion/importAssertion5.ts b/tests/cases/conformance/importAssertion/importAssertion5.ts
|
||
new file mode 100644
|
||
index 0000000000..ef09d84e66
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/importAssertion/importAssertion5.ts
|
||
@@ -0,0 +1 @@
|
||
+import * as f from "./first" assert {
|
||
diff --git a/tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases3.ts b/tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases3.ts
|
||
index e3d076707b..8b95f5e240 100644
|
||
--- a/tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases3.ts
|
||
+++ b/tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases3.ts
|
||
@@ -32,4 +32,8 @@ class D implements A<boolean> {
|
||
d: string;
|
||
y: boolean;
|
||
z: boolean;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let ww1 = new C();
|
||
+let ww2 = new C2();
|
||
+let ww3 = new C3();
|
||
+let ww4 = new C4();
|
||
diff --git a/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersection.ts b/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersection.ts
|
||
index 003976a2b2..1ab2942311 100644
|
||
--- a/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersection.ts
|
||
+++ b/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersection.ts
|
||
@@ -53,3 +53,15 @@ class C20 extends Constructor<Partial<T1>>() { x: string }
|
||
class C21 extends Constructor<Readonly<T1>>() { x: string }
|
||
class C22 extends Constructor<Identifiable<T1>>() { x: string }
|
||
class C23 extends Constructor<Identifiable<T1 & { b: number}>>() { x: string }
|
||
+let c1 = new C1();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
+let c4 = new C4();
|
||
+let c5 = new C5();
|
||
+let c6 = new C6();
|
||
+let c7 = new C7();
|
||
+let cx = new CX();
|
||
+let c20 = new C20();
|
||
+let c21 = new C21();
|
||
+let c22 = new C22();
|
||
+let c23 = new C23();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithPropertyOfEveryType.ts b/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithPropertyOfEveryType.ts
|
||
index 6979b40579..20d877f7a2 100644
|
||
--- a/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithPropertyOfEveryType.ts
|
||
+++ b/tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithPropertyOfEveryType.ts
|
||
@@ -39,4 +39,5 @@ var a: Foo = {
|
||
m: M,
|
||
n: {},
|
||
o: E.A
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndAmbientWithSameNameAndCommonRoot.ts b/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndAmbientWithSameNameAndCommonRoot.ts
|
||
index 12f51f90a7..e1af2f0ac6 100644
|
||
--- a/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndAmbientWithSameNameAndCommonRoot.ts
|
||
+++ b/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndAmbientWithSameNameAndCommonRoot.ts
|
||
@@ -21,4 +21,3 @@ declare module A {
|
||
var p: { x: number; y: number; }
|
||
var p = A.Point.Origin;
|
||
var p = new A.Point(0, 0); // unexpected error here, bug 840000
|
||
-
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.ts b/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.ts
|
||
index e923f1f002..b9bb58e89e 100644
|
||
--- a/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.ts
|
||
+++ b/tests/cases/conformance/internalModules/DeclarationMerging/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.ts
|
||
@@ -13,6 +13,7 @@ module A {
|
||
export class Point {
|
||
constructor(public x: number, public y: number) { }
|
||
}
|
||
+ let pp = new Point(1,1);
|
||
}
|
||
|
||
// @filename: test.ts
|
||
diff --git a/tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.ts b/tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.ts
|
||
index d285d9b422..9dca12bc2e 100644
|
||
--- a/tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.ts
|
||
+++ b/tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.ts
|
||
@@ -19,4 +19,6 @@ module A {
|
||
export module Point {
|
||
function Origin() { return ""; }// not an error since not exported
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+ let pp = new Point(1,1);
|
||
+}
|
||
+let pp1 = new Point(1,1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.ts b/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.ts
|
||
index 7d88bf6292..71433fbef5 100644
|
||
--- a/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.ts
|
||
+++ b/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.ts
|
||
@@ -3,6 +3,7 @@ module A {
|
||
x: number;
|
||
y: number;
|
||
}
|
||
+ let pp = new Point();
|
||
}
|
||
|
||
module A {
|
||
@@ -11,6 +12,7 @@ module A {
|
||
return { x: p.x, y: p.y };
|
||
}
|
||
}
|
||
+ let pp1 = new Point();
|
||
}
|
||
|
||
// ensure merges as expected
|
||
@@ -21,6 +23,7 @@ module X.Y.Z {
|
||
export class Line {
|
||
length: number;
|
||
}
|
||
+ let ll = new Line();
|
||
}
|
||
|
||
module X {
|
||
@@ -29,6 +32,7 @@ module X {
|
||
class Line {
|
||
name: string;
|
||
}
|
||
+ let ll1 = new Line()
|
||
}
|
||
}
|
||
}
|
||
diff --git a/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.ts b/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.ts
|
||
index 449e6e76a2..a0c9072675 100644
|
||
--- a/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.ts
|
||
+++ b/tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.ts
|
||
@@ -16,6 +16,7 @@ module X.Y.Z {
|
||
export class Line {
|
||
length: number;
|
||
}
|
||
+ let ll = new Line();
|
||
}
|
||
|
||
module X {
|
||
@@ -24,6 +25,7 @@ module X {
|
||
export class Line {
|
||
name: string;
|
||
}
|
||
+ let ll1 = new Line();
|
||
}
|
||
}
|
||
}
|
||
diff --git a/tests/cases/conformance/internalModules/codeGeneration/exportCodeGen.ts b/tests/cases/conformance/internalModules/codeGeneration/exportCodeGen.ts
|
||
index 02398acbbb..321d84cd56 100644
|
||
--- a/tests/cases/conformance/internalModules/codeGeneration/exportCodeGen.ts
|
||
+++ b/tests/cases/conformance/internalModules/codeGeneration/exportCodeGen.ts
|
||
@@ -39,6 +39,7 @@ module E {
|
||
export module M {
|
||
export var x = 42;
|
||
}
|
||
+ let c1 = new C();
|
||
}
|
||
|
||
// validate all exportable statements,
|
||
@@ -51,4 +52,5 @@ module F {
|
||
module M {
|
||
var x = 42;
|
||
}
|
||
+ let c2 = new C();
|
||
}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/internalModules/codeGeneration/nameCollision.ts b/tests/cases/conformance/internalModules/codeGeneration/nameCollision.ts
|
||
index aef48103cd..14d12af759 100644
|
||
--- a/tests/cases/conformance/internalModules/codeGeneration/nameCollision.ts
|
||
+++ b/tests/cases/conformance/internalModules/codeGeneration/nameCollision.ts
|
||
@@ -15,6 +15,7 @@ module B {
|
||
class B {
|
||
name: string;
|
||
}
|
||
+ let bb = new B();
|
||
}
|
||
|
||
module X {
|
||
diff --git a/tests/cases/conformance/jsdoc/constructorTagOnClassConstructor.ts b/tests/cases/conformance/jsdoc/constructorTagOnClassConstructor.ts
|
||
index 6d2f3780ee..72a97ff055 100644
|
||
--- a/tests/cases/conformance/jsdoc/constructorTagOnClassConstructor.ts
|
||
+++ b/tests/cases/conformance/jsdoc/constructorTagOnClassConstructor.ts
|
||
@@ -11,4 +11,6 @@ export class Beta {
|
||
}
|
||
}
|
||
|
||
-const arr = [Alpha, Beta];
|
||
+// const arr = [Alpha, Beta];
|
||
+let aa = new Alpha();
|
||
+let be = new Beta();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.ts b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.ts
|
||
index eb609720d7..b0bf85be74 100644
|
||
--- a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.ts
|
||
+++ b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.ts
|
||
@@ -16,4 +16,5 @@ export class Sub extends Super {
|
||
constructor() {
|
||
super('first', 'second');
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let ss = new Sub();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsThisTypes.ts b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsThisTypes.ts
|
||
index bc2eae7dac..29ba837ef9 100644
|
||
--- a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsThisTypes.ts
|
||
+++ b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsThisTypes.ts
|
||
@@ -14,4 +14,6 @@ export class A {
|
||
export default class Base extends A {
|
||
// This method is required to reproduce #35932
|
||
verify() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let b = new Base();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/enumTagImported/enumTagImported.ts b/tests/cases/conformance/jsdoc/enumTagImported/enumTagImported.ts
|
||
new file mode 100644
|
||
index 0000000000..859c60103b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/enumTagImported/enumTagImported.ts
|
||
@@ -0,0 +1,23 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+// @Filename: type.js
|
||
+/** @typedef {import("./mod1").TestEnum} TE */
|
||
+/** @type {TE} */
|
||
+const test = 'add'
|
||
+/** @type {import("./mod1").TestEnum} */
|
||
+const tost = 'remove'
|
||
+
|
||
+// @Filename: value.js
|
||
+import { TestEnum } from "./mod1"
|
||
+/** @type {TestEnum} */
|
||
+const tist = TestEnum.ADD
|
||
+
|
||
+
|
||
+// @Filename: mod1.js
|
||
+
|
||
+/** @enum {string} */
|
||
+// export const TestEnum = {
|
||
+// ADD: 'add',
|
||
+// REMOVE: 'remove'
|
||
+// }
|
||
diff --git a/tests/cases/conformance/jsdoc/extendsTag1.ts b/tests/cases/conformance/jsdoc/extendsTag1.ts
|
||
index 194982760e..79b3bc7079 100644
|
||
--- a/tests/cases/conformance/jsdoc/extendsTag1.ts
|
||
+++ b/tests/cases/conformance/jsdoc/extendsTag1.ts
|
||
@@ -8,3 +8,4 @@
|
||
* @extends {Set<T>} Should prefer this Set<T>, not the Set in the heritage clause
|
||
*/
|
||
class My extends Set {}
|
||
+let q4 = new My();
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocAugments_qualifiedName/jsdocAugments_qualifiedName.ts b/tests/cases/conformance/jsdoc/jsdocAugments_qualifiedName/jsdocAugments_qualifiedName.ts
|
||
new file mode 100644
|
||
index 0000000000..ce4fb95ff2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocAugments_qualifiedName/jsdocAugments_qualifiedName.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+
|
||
+
|
||
+// @Filename: /b.js
|
||
+import * as a from "./a";
|
||
+let b = a.A;
|
||
+/** @augments a.A */
|
||
+class B {}
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocAugments_withTypeParameter.ts b/tests/cases/conformance/jsdoc/jsdocAugments_withTypeParameter.ts
|
||
index e94df03fbc..aba2b989e7 100644
|
||
--- a/tests/cases/conformance/jsdoc/jsdocAugments_withTypeParameter.ts
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocAugments_withTypeParameter.ts
|
||
@@ -12,3 +12,4 @@ class B extends A {
|
||
return this.x;
|
||
}
|
||
}
|
||
+let q7 = new B();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocImplements_namespacedInterface.ts b/tests/cases/conformance/jsdoc/jsdocImplements_namespacedInterface.ts
|
||
index c298e6685a..9af8207ba4 100644
|
||
--- a/tests/cases/conformance/jsdoc/jsdocImplements_namespacedInterface.ts
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocImplements_namespacedInterface.ts
|
||
@@ -26,3 +26,5 @@ class BAT {
|
||
return "";
|
||
}
|
||
}
|
||
+let q1 = new B();
|
||
+let q2 = new BAT();
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateTagDefault.ts b/tests/cases/conformance/jsdoc/jsdocTemplateTagDefault.ts
|
||
new file mode 100644
|
||
index 0000000000..c93359a7a6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocTemplateTagDefault.ts
|
||
@@ -0,0 +1,71 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @Filename: file.js
|
||
+
|
||
+/**
|
||
+ * @template {string | number} [T=string] - ok: defaults are permitted
|
||
+ * @typedef {[T]} A
|
||
+ */
|
||
+
|
||
+/** @type {A} */ // ok, default for `T` in `A` is `string`
|
||
+const aDefault1 = [""];
|
||
+/** @type {A} */ // error: `number` is not assignable to string`
|
||
+const aDefault2 = [0];
|
||
+/** @type {A<string>} */ // ok, `T` is provided for `A`
|
||
+const aString = [""];
|
||
+/** @type {A<number>} */ // ok, `T` is provided for `A`
|
||
+const aNumber = [0];
|
||
+
|
||
+/**
|
||
+ * @template T
|
||
+ * @template [U=T] - ok: default can reference earlier type parameter
|
||
+ * @typedef {[T, U]} B
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @template {string | number} [T] - error: default requires an `=type`
|
||
+ * @typedef {[T]} C
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @template {string | number} [T=] - error: default requires a `type`
|
||
+ * @typedef {[T]} D
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @template {string | number} [T=string]
|
||
+ * @template U - error: Required type parameters cannot follow optional type parameters
|
||
+ * @typedef {[T, U]} E
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
|
||
+ * @template [U=T]
|
||
+ * @typedef {[T, U]} G
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @template T
|
||
+ * @template [U=T] - ok: default can reference earlier type parameter
|
||
+ * @param {T} a
|
||
+ * @param {U} b
|
||
+ */
|
||
+function f1(a, b) {}
|
||
+
|
||
+ /**
|
||
+ * @template {string | number} [T=string]
|
||
+ * @template U - error: Required type parameters cannot follow optional type parameters
|
||
+ * @param {T} a
|
||
+ * @param {U} b
|
||
+ */
|
||
+function f2(a, b) {}
|
||
+
|
||
+/**
|
||
+ * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
|
||
+ * @template [U=T]
|
||
+ * @param {T} a
|
||
+ * @param {U} b
|
||
+ */
|
||
+function f3(a, b) {}
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateTagNameResolution.ts b/tests/cases/conformance/jsdoc/jsdocTemplateTagNameResolution.ts
|
||
new file mode 100644
|
||
index 0000000000..a5b4d052ad
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocTemplateTagNameResolution.ts
|
||
@@ -0,0 +1,16 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @declaration: true
|
||
+// @Filename: file.js
|
||
+
|
||
+/**
|
||
+ * @template T
|
||
+ * @template {keyof T} K
|
||
+ * @typedef {T[K]} Foo
|
||
+ */
|
||
+
|
||
+const x = { a: 1 };
|
||
+
|
||
+/** @type {Foo<typeof x, "a">} */
|
||
+const y = "a";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocTypeReferenceUseBeforeDef.ts b/tests/cases/conformance/jsdoc/jsdocTypeReferenceUseBeforeDef.ts
|
||
index 93e735e1fa..b38836e7e7 100644
|
||
--- a/tests/cases/conformance/jsdoc/jsdocTypeReferenceUseBeforeDef.ts
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocTypeReferenceUseBeforeDef.ts
|
||
@@ -6,3 +6,4 @@
|
||
const c = null
|
||
class C {
|
||
}
|
||
+let q3 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/jsdoc/jsdocVariadicType.ts b/tests/cases/conformance/jsdoc/jsdocVariadicType.ts
|
||
new file mode 100644
|
||
index 0000000000..cd4e75a54a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/jsdocVariadicType.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @allowJS: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+
|
||
+// @filename: a.js
|
||
+/**
|
||
+ * @type {function(boolean, string, ...*):void}
|
||
+ */
|
||
+const foo = function (a, b, ...r) { };
|
||
+
|
||
+// @filename: b.ts
|
||
+foo(false, '');
|
||
diff --git a/tests/cases/conformance/jsdoc/seeTag3.ts b/tests/cases/conformance/jsdoc/seeTag3.ts
|
||
new file mode 100644
|
||
index 0000000000..abd16226fe
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/seeTag3.ts
|
||
@@ -0,0 +1,7 @@
|
||
+// @outdir: out/
|
||
+// @checkJs: true
|
||
+// @filename: seeTag3.js
|
||
+
|
||
+/** @see [The typescript web site](https://typescriptlang.org) */
|
||
+function theWholeThing() {
|
||
+}
|
||
diff --git a/tests/cases/conformance/jsdoc/thisTag2.ts b/tests/cases/conformance/jsdoc/thisTag2.ts
|
||
new file mode 100644
|
||
index 0000000000..187ac9b932
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsdoc/thisTag2.ts
|
||
@@ -0,0 +1,11 @@
|
||
+// @target: esnext
|
||
+// @allowJs: true
|
||
+// @declaration: true
|
||
+// @emitDeclarationOnly: true
|
||
+// @filename: a.js
|
||
+
|
||
+/** @this {string} */
|
||
+export function f1() {}
|
||
+
|
||
+/** @this */
|
||
+export function f2() {}
|
||
diff --git a/tests/cases/conformance/jsx/jsxParsingError4.tsx b/tests/cases/conformance/jsx/jsxParsingError4.tsx
|
||
new file mode 100644
|
||
index 0000000000..c4db4fe7ab
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsx/jsxParsingError4.tsx
|
||
@@ -0,0 +1,18 @@
|
||
+// @strict: true, false
|
||
+// @jsx: react
|
||
+// @filename: a.tsx
|
||
+
|
||
+declare const React: any
|
||
+declare namespace JSX {
|
||
+ interface IntrinsicElements {
|
||
+ [k: string]: any
|
||
+ }
|
||
+}
|
||
+
|
||
+const a = (
|
||
+ <public-foo></public-foo>
|
||
+);
|
||
+
|
||
+const b = (
|
||
+ <public></public>
|
||
+);
|
||
diff --git a/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts b/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts
|
||
new file mode 100644
|
||
index 0000000000..08b6149d37
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts
|
||
@@ -0,0 +1,140 @@
|
||
+// @Filename: jsxParserRecovery.tsx
|
||
+// @jsx: preserve
|
||
+
|
||
+// should have no errors here; all these functions should parse and resolve
|
||
+noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||
+noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||
+noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||
+
|
||
+function diddy() {
|
||
+ return null;
|
||
+}
|
||
+
|
||
+var donkey = <div>
|
||
+ <
|
||
+</div>;
|
||
+function noName() { }
|
||
+var donkey = <div>
|
||
+ <diddy
|
||
+</div>;
|
||
+function noClose() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean>
|
||
+</div>;
|
||
+function noCloseTypeArg() { }
|
||
+var donkey = <div>
|
||
+ <diddy bananas="please"
|
||
+</div>;
|
||
+function noCloseAttrs() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"
|
||
+</div>;
|
||
+function noCloseTypeArgAttrs() { }
|
||
+var donkey = <div>
|
||
+ <diddy/
|
||
+</div>;
|
||
+function noCloseBracket() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"/
|
||
+</div>;
|
||
+function noCloseBracketTypeArgAttrs() { }
|
||
+var donkey = <div>
|
||
+ <diddy>
|
||
+</div>;
|
||
+function noSelfclose() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please">
|
||
+</div>;
|
||
+function noSelfcloseTypeArgAttrs() { }
|
||
+
|
||
+var donkey = <div>
|
||
+ <
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noNameTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean>
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseTypeArgTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy bananas="please"
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseAttrsTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseTypeArgAttrsTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy/
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseBracketTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"/
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy>
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noSelfcloseTrailingTag() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please">
|
||
+ <diddy/>
|
||
+</div>;
|
||
+function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||
+
|
||
+var donkey = <div>
|
||
+ <
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noNameTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean>
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseTypeArgTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy bananas="please"
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseAttrsTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseTypeArgAttrsTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy/
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseBracketTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please"/
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noCloseBracketTypeArgAttrsTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy>
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noSelfcloseTrailingText() { }
|
||
+var donkey = <div>
|
||
+ <diddy<boolean> bananas="please">
|
||
+ Cranky Wrinkly Funky
|
||
+</div>;
|
||
+function noSelfcloseTypeArgAttrsTrailingText() { }
|
||
diff --git a/tests/cases/conformance/jsx/tsxReactEmitSpreadAttribute.ts b/tests/cases/conformance/jsx/tsxReactEmitSpreadAttribute.ts
|
||
new file mode 100644
|
||
index 0000000000..2ddc20ae39
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/jsx/tsxReactEmitSpreadAttribute.ts
|
||
@@ -0,0 +1,32 @@
|
||
+// @jsx: react-jsx
|
||
+// @target: es2015,es2018,esnext
|
||
+// @filename: test.tsx
|
||
+/// <reference path="/.lib/react16.d.ts" />
|
||
+
|
||
+export function T1(a: any) {
|
||
+ return <div className={"T1"} { ...a }>T1</div>;
|
||
+}
|
||
+
|
||
+export function T2(a: any, b: any) {
|
||
+ return <div className={"T2"} { ...a } { ...b }>T2</div>;
|
||
+}
|
||
+
|
||
+export function T3(a: any, b: any) {
|
||
+ return <div { ...a } className={"T3"} { ...b }>T3</div>;
|
||
+}
|
||
+
|
||
+export function T4(a: any, b: any) {
|
||
+ return <div className={"T4"} { ...{ ...a, ...b } }>T4</div>;
|
||
+}
|
||
+
|
||
+export function T5(a: any, b: any, c: any, d: any) {
|
||
+ return <div className={"T5"} { ...{ ...a, ...b, ...{ c, d } } }>T5</div>;
|
||
+}
|
||
+
|
||
+export function T6(a: any, b: any, c: any, d: any) {
|
||
+ return <div className={"T6"} { ...{ ...a, ...b, ...{ ...c, ...d } } }>T6</div>;
|
||
+}
|
||
+
|
||
+export function T7(a: any, b: any, c: any, d: any) {
|
||
+ return <div>T7</div>;
|
||
+}
|
||
diff --git a/tests/cases/conformance/moduleResolution/declarationNotFoundPackageBundlesTypes.ts b/tests/cases/conformance/moduleResolution/declarationNotFoundPackageBundlesTypes.ts
|
||
new file mode 100644
|
||
index 0000000000..75c681daf0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/declarationNotFoundPackageBundlesTypes.ts
|
||
@@ -0,0 +1,23 @@
|
||
+// @noImplicitAny: true
|
||
+// @noImplicitReferences: true
|
||
+
|
||
+// @filename: node_modules/foo/package.json
|
||
+{
|
||
+ "name": "foo",
|
||
+ "version": "1.0.0"
|
||
+}
|
||
+
|
||
+// @filename: node_modules/foo/index.js
|
||
+var foo = 0;
|
||
+module.exports = foo;
|
||
+
|
||
+// @filename: node_modules/foo/index.d.ts
|
||
+declare const foo: any;
|
||
+export = foo;
|
||
+
|
||
+// @filename: node_modules/foo/other.js
|
||
+module.exports = {};
|
||
+
|
||
+// @filename: index.ts
|
||
+import * as Foo from "foo";
|
||
+import * as Other from "foo/other"/*1*/;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/moduleResolution/scopedPackages/index.d.ts b/tests/cases/conformance/moduleResolution/scopedPackages/index.d.ts
|
||
new file mode 100644
|
||
index 0000000000..04d4f15421
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/scopedPackages/index.d.ts
|
||
@@ -0,0 +1,3 @@
|
||
+// @filename: /node_modules/@cow/boy/index.d.ts
|
||
+export const x: number;
|
||
+export const y: number;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/moduleResolution/scopedPackages/scopedPackages.ts b/tests/cases/conformance/moduleResolution/scopedPackages/scopedPackages.ts
|
||
new file mode 100644
|
||
index 0000000000..80db9778d1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/scopedPackages/scopedPackages.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @noImplicitReferences: true
|
||
+// @traceResolution: true
|
||
+// @typeRoots: types
|
||
+
|
||
+
|
||
+// @filename: /a.ts
|
||
+import { x } from "./index";
|
||
+import { y } from "./index";
|
||
+import { z } from "./z";
|
||
+x;
|
||
+y;
|
||
+z;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/moduleResolution/scopedPackages/z.d.ts b/tests/cases/conformance/moduleResolution/scopedPackages/z.d.ts
|
||
new file mode 100644
|
||
index 0000000000..8af8c4b248
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/scopedPackages/z.d.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @filename: /node_modules/@types/be__bop/e/z.d.ts
|
||
+export const z: number;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/moduleResolution/scopedPackagesClassic/index.d.ts b/tests/cases/conformance/moduleResolution/scopedPackagesClassic/index.d.ts
|
||
new file mode 100644
|
||
index 0000000000..7cfe77597d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/scopedPackagesClassic/index.d.ts
|
||
@@ -0,0 +1,2 @@
|
||
+// @filename: /node_modules/@types/see__saw/index.d.ts
|
||
+export const x = 0;
|
||
diff --git a/tests/cases/conformance/moduleResolution/scopedPackagesClassic/scopedPackagesClassic.ts b/tests/cases/conformance/moduleResolution/scopedPackagesClassic/scopedPackagesClassic.ts
|
||
new file mode 100644
|
||
index 0000000000..4f491b9532
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/scopedPackagesClassic/scopedPackagesClassic.ts
|
||
@@ -0,0 +1,9 @@
|
||
+// @noImplicitReferences: true
|
||
+// @traceResolution: true
|
||
+// @typeRoots: types
|
||
+// @moduleResolution: classic
|
||
+
|
||
+
|
||
+// @filename: /a.ts
|
||
+import { x } from "./index";
|
||
+x;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/moduleResolution/untypedModuleImport_allowJs/untypedModuleImport_allowJs.ts b/tests/cases/conformance/moduleResolution/untypedModuleImport_allowJs/untypedModuleImport_allowJs.ts
|
||
new file mode 100644
|
||
index 0000000000..b2c0c1f81c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/untypedModuleImport_allowJs/untypedModuleImport_allowJs.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @noImplicitReferences: true
|
||
+// @currentDirectory: /
|
||
+// @allowJs: true
|
||
+// @maxNodeModuleJsDepth: 1
|
||
+// Same as untypedModuleImport.ts but with --allowJs, so the package will actually be typed.
|
||
+
|
||
+// @filename: /node_modules/foo/index.js
|
||
+// exports.default = { bar() { return 0; } }
|
||
+
|
||
+// @filename: /a.ts
|
||
+import foo from "foo";
|
||
+foo.bar();
|
||
diff --git a/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/declarations.d.ts b/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/declarations.d.ts
|
||
new file mode 100644
|
||
index 0000000000..c54d01514d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/declarations.d.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @filename: /declarations.d.ts
|
||
+declare module "foo" {
|
||
+ export const x: number;
|
||
+}
|
||
diff --git a/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/untypedModuleImport_vsAmbient.ts b/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/untypedModuleImport_vsAmbient.ts
|
||
new file mode 100644
|
||
index 0000000000..577d258b72
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/moduleResolution/untypedModuleImport_vsAmbient/untypedModuleImport_vsAmbient.ts
|
||
@@ -0,0 +1,12 @@
|
||
+// @noImplicitReferences: true
|
||
+// @currentDirectory: /
|
||
+// This tests that an ambient module declaration overrides an untyped import.
|
||
+
|
||
+// @filename: /node_modules/foo/index.js
|
||
+// This file is not processed.
|
||
+
|
||
+
|
||
+// @filename: /a.ts
|
||
+/// <reference path="./declarations.d.ts" />
|
||
+import { x } from "foo";
|
||
+x;
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName.ts b/tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName.ts
|
||
new file mode 100644
|
||
index 0000000000..a19a7104ae
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName.ts
|
||
@@ -0,0 +1,24 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: index.cjs
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJs1.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJs1.ts
|
||
new file mode 100644
|
||
index 0000000000..113c1fdeb8
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJs1.ts
|
||
@@ -0,0 +1,324 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder/index.cjs
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder/index.mjs
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.js
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.cjs
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.mjs
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.js
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.cjs
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.mjs
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.js
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones shouldn't all work - esm format files have no index resolution or extension resolution
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.cjs
|
||
+// ESM-format imports below should issue errors
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones should _mostly_ work - cjs format files have index resolution and extension resolution (except for those which resolve to an esm format file)
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.mjs
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones should all fail - esm format files have no index resolution or extension resolution
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: subfolder2/package.json
|
||
+{
|
||
+}
|
||
+// @filename: subfolder2/another/package.json
|
||
+{
|
||
+ "type": "module"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsCjsFromJs.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsCjsFromJs.ts
|
||
new file mode 100644
|
||
index 0000000000..ea0821742f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsCjsFromJs.ts
|
||
@@ -0,0 +1,8 @@
|
||
+// @module: node12,nodenext
|
||
+// @allowJs: true
|
||
+// @noEmit: true
|
||
+// @filename: foo.cjs
|
||
+exports.foo = "foo"
|
||
+// @filename: bar.ts
|
||
+import foo from "./foo.cjs"
|
||
+foo.foo;
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsConditionalPackageExports.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsConditionalPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..1020812d5a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsConditionalPackageExports.ts
|
||
@@ -0,0 +1,126 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.mjsSource;
|
||
+mjsi.mjsSource;
|
||
+typei.mjsSource;
|
||
+ts.mjsSource;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.mjsSource;
|
||
+mjsi.mjsSource;
|
||
+typei.mjsSource;
|
||
+ts.mjsSource;
|
||
+// @filename: index.cjs
|
||
+// cjs format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.cjsSource;
|
||
+mjsi.cjsSource;
|
||
+typei.implicitCjsSource;
|
||
+ts.cjsSource;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const implicitCjsSource = true;
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const mjsSource = true;
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const cjsSource = true;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./a": {
|
||
+ "require": "./index.cjs",
|
||
+ "node": "./index.mjs"
|
||
+ },
|
||
+ "./b": {
|
||
+ "import": "./index.mjs",
|
||
+ "node": "./index.cjs"
|
||
+ },
|
||
+ ".": {
|
||
+ "import": "./index.mjs",
|
||
+ "node": "./index.js"
|
||
+ },
|
||
+ "./types": {
|
||
+ "types": {
|
||
+ "import": "./index.d.mts",
|
||
+ "require": "./index.d.cts",
|
||
+ },
|
||
+ "node": {
|
||
+ "import": "./index.mjs",
|
||
+ "require": "./index.cjs"
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsDynamicImport.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsDynamicImport.ts
|
||
new file mode 100644
|
||
index 0000000000..d7032c648b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsDynamicImport.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+export async function main() {
|
||
+ const { readFile } = await import("fs");
|
||
+}
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+export async function main() {
|
||
+ const { readFile } = await import("fs");
|
||
+}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsExportAssignment.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsExportAssignment.ts
|
||
new file mode 100644
|
||
index 0000000000..f7d5aaf822
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsExportAssignment.ts
|
||
@@ -0,0 +1,32 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+const a = {};
|
||
+export = a;
|
||
+// @filename: subfolder/file.js
|
||
+// cjs format file
|
||
+const a = {};
|
||
+module.exports = a;
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+const a = {};
|
||
+export = a;
|
||
+// @filename: file.js
|
||
+// esm format file
|
||
+import "fs";
|
||
+const a = {};
|
||
+module.exports = a;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsGeneratedNameCollisions.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsGeneratedNameCollisions.ts
|
||
new file mode 100644
|
||
index 0000000000..14783731bf
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsGeneratedNameCollisions.ts
|
||
@@ -0,0 +1,29 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+function require() {}
|
||
+const exports = {};
|
||
+class Object {}
|
||
+export const __esModule = false;
|
||
+export {require, exports, Object};
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+function require() {}
|
||
+const exports = {};
|
||
+class Object {}
|
||
+export const __esModule = false;
|
||
+export {require, exports, Object};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportAssignment.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportAssignment.ts
|
||
new file mode 100644
|
||
index 0000000000..53e6b94450
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportAssignment.ts
|
||
@@ -0,0 +1,34 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: file.js
|
||
+// esm format file
|
||
+const __require = null;
|
||
+const _createRequire = null;
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions1.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions1.ts
|
||
new file mode 100644
|
||
index 0000000000..d5727a3dc7
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions1.ts
|
||
@@ -0,0 +1,34 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+import {default as _fs} from "fs";
|
||
+_fs.readFile;
|
||
+import * as fs from "fs";
|
||
+fs.readFile;
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import {default as _fs} from "fs";
|
||
+_fs.readFile;
|
||
+import * as fs from "fs";
|
||
+fs.readFile;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions2.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions2.ts
|
||
new file mode 100644
|
||
index 0000000000..032290f78b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions2.ts
|
||
@@ -0,0 +1,30 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+export * from "fs";
|
||
+export * as fs from "fs";
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+export * from "fs";
|
||
+export * as fs from "fs";
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions3.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions3.ts
|
||
new file mode 100644
|
||
index 0000000000..9452e2003a
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportHelpersCollisions3.ts
|
||
@@ -0,0 +1,32 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+export {default} from "fs";
|
||
+export {default as foo} from "fs";
|
||
+export {bar as baz} from "fs";
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+export {default} from "fs";
|
||
+export {default as foo} from "fs";
|
||
+export {bar as baz} from "fs";
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportMeta.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportMeta.ts
|
||
new file mode 100644
|
||
index 0000000000..a8708434b9
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsImportMeta.ts
|
||
@@ -0,0 +1,23 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+const x = import.meta.url;
|
||
+export {x};
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+const x = import.meta.url;
|
||
+export {x};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageExports.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..65e5721b0b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageExports.ts
|
||
@@ -0,0 +1,92 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cjs
|
||
+// cjs format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageImports.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageImports.ts
|
||
new file mode 100644
|
||
index 0000000000..b9d6027f5d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackageImports.ts
|
||
@@ -0,0 +1,41 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: index.cjs
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js",
|
||
+ "imports": {
|
||
+ "#cjs": "./index.cjs",
|
||
+ "#mjs": "./index.mjs",
|
||
+ "#type": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExports.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExports.ts
|
||
new file mode 100644
|
||
index 0000000000..2691885690
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExports.ts
|
||
@@ -0,0 +1,69 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cjs
|
||
+// cjs format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs/*": "./*.cjs",
|
||
+ "./mjs/*": "./*.mjs",
|
||
+ "./js/*": "./*.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExportsTrailers.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExportsTrailers.ts
|
||
new file mode 100644
|
||
index 0000000000..6b96f34758
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsPackagePatternExportsTrailers.ts
|
||
@@ -0,0 +1,69 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mjs
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cjs
|
||
+// cjs format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs/*.cjs": "./*.cjs",
|
||
+ "./mjs/*.mjs": "./*.mjs",
|
||
+ "./js/*.js": "./*.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsSynchronousCallErrors.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsSynchronousCallErrors.ts
|
||
new file mode 100644
|
||
index 0000000000..15892edbe3
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsSynchronousCallErrors.ts
|
||
@@ -0,0 +1,37 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+import {h} from "../index.js";
|
||
+import mod = require("../index.js");
|
||
+import {f as _f} from "./index.js";
|
||
+import mod2 = require("./index.js");
|
||
+export async function f() {
|
||
+ const mod3 = await import ("../index.js");
|
||
+ const mod4 = await import ("./index.js");
|
||
+ h();
|
||
+}
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+import {h as _h} from "./index.js";
|
||
+import mod = require("./index.js");
|
||
+import {f} from "./subfolder/index.js";
|
||
+import mod2 = require("./subfolder/index.js");
|
||
+export async function h() {
|
||
+ const mod3 = await import ("./index.js");
|
||
+ const mod4 = await import ("./subfolder/index.js");
|
||
+ f();
|
||
+}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/allowJs/nodeModulesAllowJsTopLevelAwait.ts b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsTopLevelAwait.ts
|
||
new file mode 100644
|
||
index 0000000000..872cad71c9
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/allowJs/nodeModulesAllowJsTopLevelAwait.ts
|
||
@@ -0,0 +1,25 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @outDir: out
|
||
+// @filename: subfolder/index.js
|
||
+// cjs format file
|
||
+const x = await 1;
|
||
+export {x};
|
||
+for await (const y of []) {}
|
||
+// @filename: index.js
|
||
+// esm format file
|
||
+const x = await 1;
|
||
+export {x};
|
||
+for await (const y of []) {}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/legacyNodeModulesExportsSpecifierGenerationConditions.ts b/tests/cases/conformance/node/legacyNodeModulesExportsSpecifierGenerationConditions.ts
|
||
new file mode 100644
|
||
index 0000000000..656465829e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/legacyNodeModulesExportsSpecifierGenerationConditions.ts
|
||
@@ -0,0 +1,33 @@
|
||
+// @module: commonjs
|
||
+// @lib: es2020
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+export const a = async () => (await import("inner")).x();
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+export { x } from "./other.js";
|
||
+// @filename: node_modules/inner/other.d.ts
|
||
+import { Thing } from "./private.js"
|
||
+export const x: () => Thing;
|
||
+// @filename: node_modules/inner/private.d.ts
|
||
+export interface Thing {} // not exported in export map, inaccessible under new module modes
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ ".": {
|
||
+ "default": "./index.js"
|
||
+ },
|
||
+ "./other": {
|
||
+ "default": "./other.js"
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModules1.ts b/tests/cases/conformance/node/nodeModules1.ts
|
||
new file mode 100644
|
||
index 0000000000..698a6efec1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModules1.ts
|
||
@@ -0,0 +1,321 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder/index.cts
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder/index.mts
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.ts
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.cts
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/index.mts
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.ts
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.mts
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.cts
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.mts
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones should all fail - esm format files have no index resolution or extension resolution
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.cts
|
||
+// ESM-format imports below should issue errors
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones should _mostly_ work - cjs format files have index resolution and extension resolution (except for those which resolve to an esm format file)
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+// cjs format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: index.ts
|
||
+import * as m1 from "./index.js";
|
||
+import * as m2 from "./index.mjs";
|
||
+import * as m3 from "./index.cjs";
|
||
+import * as m4 from "./subfolder/index.js";
|
||
+import * as m5 from "./subfolder/index.mjs";
|
||
+import * as m6 from "./subfolder/index.cjs";
|
||
+import * as m7 from "./subfolder2/index.js";
|
||
+import * as m8 from "./subfolder2/index.mjs";
|
||
+import * as m9 from "./subfolder2/index.cjs";
|
||
+import * as m10 from "./subfolder2/another/index.js";
|
||
+import * as m11 from "./subfolder2/another/index.mjs";
|
||
+import * as m12 from "./subfolder2/another/index.cjs";
|
||
+// The next ones shouldn't all work - esm format files have no index resolution or extension resolution
|
||
+import * as m13 from "./";
|
||
+import * as m14 from "./index";
|
||
+import * as m15 from "./subfolder";
|
||
+import * as m16 from "./subfolder/";
|
||
+import * as m17 from "./subfolder/index";
|
||
+import * as m18 from "./subfolder2";
|
||
+import * as m19 from "./subfolder2/";
|
||
+import * as m20 from "./subfolder2/index";
|
||
+import * as m21 from "./subfolder2/another";
|
||
+import * as m22 from "./subfolder2/another/";
|
||
+import * as m23 from "./subfolder2/another/index";
|
||
+void m1;
|
||
+void m2;
|
||
+void m3;
|
||
+void m4;
|
||
+void m5;
|
||
+void m6;
|
||
+void m7;
|
||
+void m8;
|
||
+void m9;
|
||
+void m10;
|
||
+void m11;
|
||
+void m12;
|
||
+void m13;
|
||
+void m14;
|
||
+void m15;
|
||
+void m16;
|
||
+void m17;
|
||
+void m18;
|
||
+void m19;
|
||
+void m20;
|
||
+void m21;
|
||
+void m22;
|
||
+void m23;
|
||
+
|
||
+// These should _mostly_ work - `import = require` always desugars to require calls, which do have extension and index resolution (but can't load anything that resolves to esm!)
|
||
+import m24 = require("./");
|
||
+import m25 = require("./index");
|
||
+import m26 = require("./subfolder");
|
||
+import m27 = require("./subfolder/");
|
||
+import m28 = require("./subfolder/index");
|
||
+import m29 = require("./subfolder2");
|
||
+import m30 = require("./subfolder2/");
|
||
+import m31 = require("./subfolder2/index");
|
||
+import m32 = require("./subfolder2/another");
|
||
+import m33 = require("./subfolder2/another/");
|
||
+import m34 = require("./subfolder2/another/index");
|
||
+void m24;
|
||
+void m25;
|
||
+void m26;
|
||
+void m27;
|
||
+void m28;
|
||
+void m29;
|
||
+void m30;
|
||
+void m31;
|
||
+void m32;
|
||
+void m33;
|
||
+void m34;
|
||
+
|
||
+// These shouldn't work - dynamic `import()` always uses the esm resolver, which does not have extension resolution
|
||
+const _m35 = import("./");
|
||
+const _m36 = import("./index");
|
||
+const _m37 = import("./subfolder");
|
||
+const _m38 = import("./subfolder/");
|
||
+const _m39 = import("./subfolder/index");
|
||
+const _m40 = import("./subfolder2");
|
||
+const _m41 = import("./subfolder2/");
|
||
+const _m42 = import("./subfolder2/index");
|
||
+const _m43 = import("./subfolder2/another");
|
||
+const _m44 = import("./subfolder2/another/");
|
||
+const _m45 = import("./subfolder2/another/index");
|
||
+// esm format file
|
||
+const x = 1;
|
||
+export {x};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: subfolder2/package.json
|
||
+{
|
||
+}
|
||
+// @filename: subfolder2/another/package.json
|
||
+{
|
||
+ "type": "module"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesCjsFormatFileAlwaysHasDefault.ts b/tests/cases/conformance/node/nodeModulesCjsFormatFileAlwaysHasDefault.ts
|
||
new file mode 100644
|
||
index 0000000000..06c6320d77
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesCjsFormatFileAlwaysHasDefault.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+export const a = 1;
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import mod from "./subfolder/index.js";
|
||
+mod;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesConditionalPackageExports.ts b/tests/cases/conformance/node/nodeModulesConditionalPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..07bf9d9724
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesConditionalPackageExports.ts
|
||
@@ -0,0 +1,124 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.mjsSource;
|
||
+mjsi.mjsSource;
|
||
+typei.mjsSource;
|
||
+ts.mjsSource;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.mjsSource;
|
||
+mjsi.mjsSource;
|
||
+typei.mjsSource;
|
||
+ts.mjsSource;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/a";
|
||
+import * as mjsi from "inner/b";
|
||
+import * as typei from "inner";
|
||
+import * as ts from "inner/types";
|
||
+cjsi.cjsSource;
|
||
+mjsi.cjsSource;
|
||
+typei.implicitCjsSource;
|
||
+ts.cjsSource;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const implicitCjsSource = true;
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const mjsSource = true;
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/a";
|
||
+import * as mjs from "inner/b";
|
||
+import * as type from "inner";
|
||
+import * as ts from "inner/types";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+export { ts };
|
||
+export const cjsSource = true;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./a": {
|
||
+ "require": "./index.cjs",
|
||
+ "node": "./index.mjs"
|
||
+ },
|
||
+ "./b": {
|
||
+ "import": "./index.mjs",
|
||
+ "node": "./index.cjs"
|
||
+ },
|
||
+ ".": {
|
||
+ "import": "./index.mjs",
|
||
+ "node": "./index.js"
|
||
+ },
|
||
+ "./types": {
|
||
+ "types": {
|
||
+ "import": "./index.d.mts",
|
||
+ "require": "./index.d.cts",
|
||
+ },
|
||
+ "node": {
|
||
+ "import": "./index.mjs",
|
||
+ "require": "./index.cjs"
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesDeclarationEmitDynamicImportWithPackageExports.ts b/tests/cases/conformance/node/nodeModulesDeclarationEmitDynamicImportWithPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..3f8bae7ffc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesDeclarationEmitDynamicImportWithPackageExports.ts
|
||
@@ -0,0 +1,71 @@
|
||
+// @module: nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+export {};
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+export {};
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+export {};
|
||
+// @filename: other.ts
|
||
+// esm format file
|
||
+export const a = await import("package/cjs");
|
||
+export const b = await import("package/mjs");
|
||
+export const c = await import("package");
|
||
+export const f = await import("inner");
|
||
+// @filename: other2.ts
|
||
+// esm format file
|
||
+export const d = await import("inner/cjs");
|
||
+export const e = await import("inner/mjs");
|
||
+// @filename: other.mts
|
||
+// esm format file
|
||
+export const a = await import("package/cjs");
|
||
+export const b = await import("package/mjs");
|
||
+export const c = await import("package");
|
||
+export const f = await import("inner");
|
||
+// @filename: other2.mts
|
||
+// esm format file
|
||
+export const d = await import("inner/cjs");
|
||
+export const e = await import("inner/mjs");
|
||
+// @filename: other.cts
|
||
+// cjs format file, no TLA
|
||
+export const a = import("package/cjs");
|
||
+export const b = import("package/mjs");
|
||
+export const c = import("package");
|
||
+export const f = import("inner");
|
||
+// @filename: other2.cts
|
||
+// cjs format file, no TLA
|
||
+export const d = import("inner/cjs");
|
||
+export const e = import("inner/mjs");
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+export const cjsMain = true;
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+export const esm = true;
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+export const cjsNonmain = true;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesDeclarationEmitWithPackageExports.ts b/tests/cases/conformance/node/nodeModulesDeclarationEmitWithPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..2599ff429f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesDeclarationEmitWithPackageExports.ts
|
||
@@ -0,0 +1,93 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+export const a = cjs;
|
||
+export const b = mjs;
|
||
+export const c = type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+export const d = cjsi;
|
||
+export const e = mjsi;
|
||
+export const f = typei;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+export const a = cjs;
|
||
+export const b = mjs;
|
||
+export const c = type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+export const d = cjsi;
|
||
+export const e = mjsi;
|
||
+export const f = typei;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+export const a = cjs;
|
||
+export const b = mjs;
|
||
+export const c = type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+export const d = cjsi;
|
||
+export const e = mjsi;
|
||
+export const f = typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+export const cjsMain = true;
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+export const esm = true;
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+export const cjsNonmain = true;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesDynamicImport.ts b/tests/cases/conformance/node/nodeModulesDynamicImport.ts
|
||
new file mode 100644
|
||
index 0000000000..46b317ca52
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesDynamicImport.ts
|
||
@@ -0,0 +1,24 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+export async function main() {
|
||
+ const { readFile } = await import("fs");
|
||
+}
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+export async function main() {
|
||
+ const { readFile } = await import("fs");
|
||
+}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesExportAssignments.ts b/tests/cases/conformance/node/nodeModulesExportAssignments.ts
|
||
new file mode 100644
|
||
index 0000000000..7cbcd200d9
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesExportAssignments.ts
|
||
@@ -0,0 +1,20 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+const a = {};
|
||
+export = a;
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+const a = {};
|
||
+export = a;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesExportsBlocksSpecifierResolution.ts b/tests/cases/conformance/node/nodeModulesExportsBlocksSpecifierResolution.ts
|
||
new file mode 100644
|
||
index 0000000000..ffc5adf8e0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesExportsBlocksSpecifierResolution.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import { Thing } from "inner/other";
|
||
+export const a = (await import("inner")).x();
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// esm format file
|
||
+export { x } from "./other.js";
|
||
+// @filename: node_modules/inner/other.d.ts
|
||
+// esm format file
|
||
+export interface Thing {}
|
||
+export const x: () => Thing;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationConditions.ts b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationConditions.ts
|
||
new file mode 100644
|
||
index 0000000000..2562c7a4a1
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationConditions.ts
|
||
@@ -0,0 +1,34 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import { Thing } from "inner/other.js"; // should fail
|
||
+export const a = (await import("inner")).x();
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// esm format file
|
||
+export { x } from "./other.js";
|
||
+// @filename: node_modules/inner/other.d.ts
|
||
+// esm format file
|
||
+export interface Thing {}
|
||
+export const x: () => Thing;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ ".": {
|
||
+ "default": "./index.js"
|
||
+ },
|
||
+ "./other": {
|
||
+ "default": "./other.js"
|
||
+ }
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationDirectory.ts b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationDirectory.ts
|
||
new file mode 100644
|
||
index 0000000000..2eb8ac58e6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationDirectory.ts
|
||
@@ -0,0 +1,29 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import { Thing } from "inner/other";
|
||
+export const a = (await import("inner/index.js")).x();
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// esm format file
|
||
+export { x } from "./other.js";
|
||
+// @filename: node_modules/inner/other.d.ts
|
||
+// esm format file
|
||
+export interface Thing {}
|
||
+export const x: () => Thing;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./": "./"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationPattern.ts b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationPattern.ts
|
||
new file mode 100644
|
||
index 0000000000..97812da5b5
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesExportsSpecifierGenerationPattern.ts
|
||
@@ -0,0 +1,29 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import { Thing } from "inner/other";
|
||
+export const a = (await import("inner/index.js")).x();
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// esm format file
|
||
+export { x } from "./other.js";
|
||
+// @filename: node_modules/inner/other.d.ts
|
||
+// esm format file
|
||
+export interface Thing {}
|
||
+export const x: () => Thing;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./*.js": "./*.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesForbidenSyntax.ts b/tests/cases/conformance/node/nodeModulesForbidenSyntax.ts
|
||
new file mode 100644
|
||
index 0000000000..d441627d7d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesForbidenSyntax.ts
|
||
@@ -0,0 +1,67 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder/index.cts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder/index.mts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/index.ts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/index.cts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/index.mts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.ts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.mts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: subfolder2/another/index.cts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+const x = <T>() => <T><any>(void 0);
|
||
+export {x};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: subfolder2/package.json
|
||
+{
|
||
+}
|
||
+// @filename: subfolder2/another/package.json
|
||
+{
|
||
+ "type": "module"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesGeneratedNameCollisions.ts b/tests/cases/conformance/node/nodeModulesGeneratedNameCollisions.ts
|
||
new file mode 100644
|
||
index 0000000000..e9a9b9d9ed
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesGeneratedNameCollisions.ts
|
||
@@ -0,0 +1,26 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+function require() {}
|
||
+const exports = {};
|
||
+class Object {}
|
||
+export const __esModule = false;
|
||
+export {require, exports, Object};
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+function require() {}
|
||
+const exports = {};
|
||
+class Object {}
|
||
+export const __esModule = false;
|
||
+export {require, exports, Object};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportAssertions.ts b/tests/cases/conformance/node/nodeModulesImportAssertions.ts
|
||
new file mode 100644
|
||
index 0000000000..0fe1ccdf82
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportAssertions.ts
|
||
@@ -0,0 +1,13 @@
|
||
+// @module: node12,nodenext
|
||
+// @resolveJsonModule: true
|
||
+// @filename: index.ts
|
||
+import json from "./package.json" assert { type: "json" };
|
||
+// @filename: otherc.cts
|
||
+import json from "./package.json" assert { type: "json" }; // should error, cjs mode imports don't support assertions
|
||
+const json2 = import("./package.json", { assert: { type: "json" } }); // should be fine
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "pkg",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportAssignments.ts b/tests/cases/conformance/node/nodeModulesImportAssignments.ts
|
||
new file mode 100644
|
||
index 0000000000..6c22fe83e0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportAssignments.ts
|
||
@@ -0,0 +1,31 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: file.ts
|
||
+// esm format file
|
||
+const __require = null;
|
||
+const _createRequire = null;
|
||
+import fs = require("fs");
|
||
+fs.readFile;
|
||
+export import fs2 = require("fs");
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportHelpersCollisions.ts b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions.ts
|
||
new file mode 100644
|
||
index 0000000000..103b583712
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions.ts
|
||
@@ -0,0 +1,31 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+import {default as _fs} from "fs";
|
||
+_fs.readFile;
|
||
+import * as fs from "fs";
|
||
+fs.readFile;
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import {default as _fs} from "fs";
|
||
+_fs.readFile;
|
||
+import * as fs from "fs";
|
||
+fs.readFile;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportHelpersCollisions2.ts b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions2.ts
|
||
new file mode 100644
|
||
index 0000000000..7f90947a5f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions2.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+export * from "fs";
|
||
+export * as fs from "fs";
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+export * from "fs";
|
||
+export * as fs from "fs";
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportHelpersCollisions3.ts b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions3.ts
|
||
new file mode 100644
|
||
index 0000000000..5f6984ad1f
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportHelpersCollisions3.ts
|
||
@@ -0,0 +1,25 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @importHelpers: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+export {default} from "fs";
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+export {default} from "fs";
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
+// @filename: types.d.ts
|
||
+declare module "fs";
|
||
+declare module "tslib" {
|
||
+ export {};
|
||
+ // intentionally missing all helpers
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportMeta.ts b/tests/cases/conformance/node/nodeModulesImportMeta.ts
|
||
new file mode 100644
|
||
index 0000000000..d684c7b5cb
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportMeta.ts
|
||
@@ -0,0 +1,20 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+const x = import.meta.url;
|
||
+export {x};
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+const x = import.meta.url;
|
||
+export {x};
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportResolutionIntoExport.ts b/tests/cases/conformance/node/nodeModulesImportResolutionIntoExport.ts
|
||
new file mode 100644
|
||
index 0000000000..2a407b2bc6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportResolutionIntoExport.ts
|
||
@@ -0,0 +1,24 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: index.cts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.cjs",
|
||
+ "imports": {
|
||
+ "#type": "package"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesImportResolutionNoCycle.ts b/tests/cases/conformance/node/nodeModulesImportResolutionNoCycle.ts
|
||
new file mode 100644
|
||
index 0000000000..c0482c86ec
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesImportResolutionNoCycle.ts
|
||
@@ -0,0 +1,24 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: index.cts
|
||
+// esm format file
|
||
+import * as type from "#type";
|
||
+type;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "package",
|
||
+ "imports": {
|
||
+ "#type": "package"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesPackageExports.ts b/tests/cases/conformance/node/nodeModulesPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..897d01b07d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesPackageExports.ts
|
||
@@ -0,0 +1,90 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as cjs from "package/cjs";
|
||
+import * as mjs from "package/mjs";
|
||
+import * as type from "package";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+import * as cjsi from "inner/cjs";
|
||
+import * as mjsi from "inner/mjs";
|
||
+import * as typei from "inner";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs";
|
||
+import * as mjs from "inner/mjs";
|
||
+import * as type from "inner";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs": "./index.cjs",
|
||
+ "./mjs": "./index.mjs",
|
||
+ ".": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesPackageImports.ts b/tests/cases/conformance/node/nodeModulesPackageImports.ts
|
||
new file mode 100644
|
||
index 0000000000..cccf930098
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesPackageImports.ts
|
||
@@ -0,0 +1,38 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: index.cts
|
||
+// esm format file
|
||
+import * as cjs from "#cjs";
|
||
+import * as mjs from "#mjs";
|
||
+import * as type from "#type";
|
||
+cjs;
|
||
+mjs;
|
||
+type;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js",
|
||
+ "imports": {
|
||
+ "#cjs": "./index.cjs",
|
||
+ "#mjs": "./index.mjs",
|
||
+ "#type": "./index.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesPackagePatternExports.ts b/tests/cases/conformance/node/nodeModulesPackagePatternExports.ts
|
||
new file mode 100644
|
||
index 0000000000..e22e497a94
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesPackagePatternExports.ts
|
||
@@ -0,0 +1,67 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as cjsi from "inner/cjs/index";
|
||
+import * as mjsi from "inner/mjs/index";
|
||
+import * as typei from "inner/js/index";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index";
|
||
+import * as mjs from "inner/mjs/index";
|
||
+import * as type from "inner/js/index";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs/*": "./*.cjs",
|
||
+ "./mjs/*": "./*.mjs",
|
||
+ "./js/*": "./*.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesPackagePatternExportsTrailers.ts b/tests/cases/conformance/node/nodeModulesPackagePatternExportsTrailers.ts
|
||
new file mode 100644
|
||
index 0000000000..3abe36e0d6
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesPackagePatternExportsTrailers.ts
|
||
@@ -0,0 +1,67 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as cjsi from "inner/cjs/index.cjs";
|
||
+import * as mjsi from "inner/mjs/index.mjs";
|
||
+import * as typei from "inner/js/index.js";
|
||
+cjsi;
|
||
+mjsi;
|
||
+typei;
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+import * as cjs from "inner/cjs/index.cjs";
|
||
+import * as mjs from "inner/mjs/index.mjs";
|
||
+import * as type from "inner/js/index.js";
|
||
+export { cjs };
|
||
+export { mjs };
|
||
+export { type };
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ "./cjs/*.cjs": "./*.cjs",
|
||
+ "./mjs/*.mjs": "./*.mjs",
|
||
+ "./js/*.js": "./*.js"
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesResolveJsonModule.ts b/tests/cases/conformance/node/nodeModulesResolveJsonModule.ts
|
||
new file mode 100644
|
||
index 0000000000..c298685c22
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesResolveJsonModule.ts
|
||
@@ -0,0 +1,29 @@
|
||
+// @module: node12,nodenext
|
||
+// @resolveJsonModule: true
|
||
+// @outDir: ./out
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+import pkg from "./package.json"
|
||
+export const name = pkg.name;
|
||
+import * as ns from "./package.json";
|
||
+export const thing = ns;
|
||
+export const name2 = ns.default.name;
|
||
+// @filename: index.cts
|
||
+import pkg from "./package.json"
|
||
+export const name = pkg.name;
|
||
+import * as ns from "./package.json";
|
||
+export const thing = ns;
|
||
+export const name2 = ns.default.name;
|
||
+// @filename: index.mts
|
||
+import pkg from "./package.json"
|
||
+export const name = pkg.name;
|
||
+import * as ns from "./package.json";
|
||
+export const thing = ns;
|
||
+export const name2 = ns.default.name;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "pkg",
|
||
+ "version": "0.0.1",
|
||
+ "type": "module",
|
||
+ "default": "misedirection"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesSynchronousCallErrors.ts b/tests/cases/conformance/node/nodeModulesSynchronousCallErrors.ts
|
||
new file mode 100644
|
||
index 0000000000..78aa93ee17
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesSynchronousCallErrors.ts
|
||
@@ -0,0 +1,34 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+import {h} from "../index.js";
|
||
+import mod = require("../index.js");
|
||
+import {f as _f} from "./index.js";
|
||
+import mod2 = require("./index.js");
|
||
+export async function f() {
|
||
+ const mod3 = await import ("../index.js");
|
||
+ const mod4 = await import ("./index.js");
|
||
+ h();
|
||
+}
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import {h as _h} from "./index.js";
|
||
+import mod = require("./index.js");
|
||
+import {f} from "./subfolder/index.js";
|
||
+import mod2 = require("./subfolder/index.js");
|
||
+export async function h() {
|
||
+ const mod3 = await import ("./index.js");
|
||
+ const mod4 = await import ("./subfolder/index.js");
|
||
+ f();
|
||
+}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesTopLevelAwait.ts b/tests/cases/conformance/node/nodeModulesTopLevelAwait.ts
|
||
new file mode 100644
|
||
index 0000000000..2fbd5d3b0c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesTopLevelAwait.ts
|
||
@@ -0,0 +1,22 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: subfolder/index.ts
|
||
+// cjs format file
|
||
+const x = await 1;
|
||
+export {x};
|
||
+for await (const y of []) {}
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+const x = await 1;
|
||
+export {x};
|
||
+for await (const y of []) {}
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module"
|
||
+}
|
||
+// @filename: subfolder/package.json
|
||
+{
|
||
+ "type": "commonjs"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodeModulesTypesVersionPackageExports.ts b/tests/cases/conformance/node/nodeModulesTypesVersionPackageExports.ts
|
||
new file mode 100644
|
||
index 0000000000..52cda091b3
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodeModulesTypesVersionPackageExports.ts
|
||
@@ -0,0 +1,53 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @outDir: out
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as mod from "inner";
|
||
+mod.correctVersionApplied;
|
||
+
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as mod from "inner";
|
||
+mod.correctVersionApplied;
|
||
+
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as mod from "inner";
|
||
+mod.correctVersionApplied;
|
||
+
|
||
+// @filename: node_modules/inner/index.d.ts
|
||
+// cjs format file
|
||
+export const noConditionsApplied = true;
|
||
+// @filename: node_modules/inner/index.d.mts
|
||
+// esm format file
|
||
+export const importConditionApplied = true;
|
||
+// @filename: node_modules/inner/index.d.cts
|
||
+// cjs format file
|
||
+export const wrongConditionApplied = true;
|
||
+// @filename: node_modules/inner/old-types.d.ts
|
||
+export const noVersionApplied = true;
|
||
+// @filename: node_modules/inner/new-types.d.ts
|
||
+export const correctVersionApplied = true;
|
||
+// @filename: node_modules/inner/future-types.d.ts
|
||
+export const futureVersionApplied = true;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+}
|
||
+// @filename: node_modules/inner/package.json
|
||
+{
|
||
+ "name": "inner",
|
||
+ "private": true,
|
||
+ "exports": {
|
||
+ ".": {
|
||
+ "types@>=10000": "./future-types.d.ts",
|
||
+ "types@>=1": "./new-types.d.ts",
|
||
+ "types": "./old-types.d.ts",
|
||
+ "import": "./index.mjs",
|
||
+ "node": "./index.js"
|
||
+ },
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodePackageSelfName.ts b/tests/cases/conformance/node/nodePackageSelfName.ts
|
||
new file mode 100644
|
||
index 0000000000..099d9c424e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodePackageSelfName.ts
|
||
@@ -0,0 +1,21 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: index.cts
|
||
+// esm format file
|
||
+import * as self from "package";
|
||
+self;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/node/nodePackageSelfNameScoped.ts b/tests/cases/conformance/node/nodePackageSelfNameScoped.ts
|
||
new file mode 100644
|
||
index 0000000000..f4ef1e3798
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/node/nodePackageSelfNameScoped.ts
|
||
@@ -0,0 +1,21 @@
|
||
+// @module: node12,nodenext
|
||
+// @declaration: true
|
||
+// @filename: index.ts
|
||
+// esm format file
|
||
+import * as self from "@scope/package";
|
||
+self;
|
||
+// @filename: index.mts
|
||
+// esm format file
|
||
+import * as self from "@scope/package";
|
||
+self;
|
||
+// @filename: index.cts
|
||
+// cjs format file
|
||
+import * as self from "@scope/package";
|
||
+self;
|
||
+// @filename: package.json
|
||
+{
|
||
+ "name": "@scope/package",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "exports": "./index.js"
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override10.ts b/tests/cases/conformance/override/override10.ts
|
||
index 3a8eca1632..31b904811c 100644
|
||
--- a/tests/cases/conformance/override/override10.ts
|
||
+++ b/tests/cases/conformance/override/override10.ts
|
||
@@ -9,4 +9,5 @@ abstract class Base {
|
||
abstract class Sub extends Base {
|
||
abstract override foo(): number;
|
||
bar() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let aa =new Sub();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override12.ts b/tests/cases/conformance/override/override12.ts
|
||
index 304caf1627..084c248b37 100644
|
||
--- a/tests/cases/conformance/override/override12.ts
|
||
+++ b/tests/cases/conformance/override/override12.ts
|
||
@@ -24,3 +24,4 @@ class B extends A {
|
||
|
||
override m3(): void {}
|
||
}
|
||
+let qq13 = new B();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override15.ts b/tests/cases/conformance/override/override15.ts
|
||
new file mode 100644
|
||
index 0000000000..882cc7eb97
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/override/override15.ts
|
||
@@ -0,0 +1,9 @@
|
||
+// @noImplicitOverride: true
|
||
+
|
||
+class A {
|
||
+ doSomething() {}
|
||
+}
|
||
+
|
||
+class B extends A {
|
||
+ override doSomethang() {}
|
||
+}
|
||
diff --git a/tests/cases/conformance/override/override16.ts b/tests/cases/conformance/override/override16.ts
|
||
index 4468edfdc4..b869c89311 100644
|
||
--- a/tests/cases/conformance/override/override16.ts
|
||
+++ b/tests/cases/conformance/override/override16.ts
|
||
@@ -8,3 +8,4 @@ class A {
|
||
class B extends A {
|
||
override foo = "string";
|
||
}
|
||
+let qq12 = new B();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override17.ts b/tests/cases/conformance/override/override17.ts
|
||
index edabe9816d..a5f92ef955 100644
|
||
--- a/tests/cases/conformance/override/override17.ts
|
||
+++ b/tests/cases/conformance/override/override17.ts
|
||
@@ -25,3 +25,4 @@ class B extends A {
|
||
|
||
override m3(): void {}
|
||
}
|
||
+let qq11 = new B();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override18.ts b/tests/cases/conformance/override/override18.ts
|
||
index 2527449e74..6d4d132193 100644
|
||
--- a/tests/cases/conformance/override/override18.ts
|
||
+++ b/tests/cases/conformance/override/override18.ts
|
||
@@ -9,3 +9,4 @@ class A {
|
||
class B extends A {
|
||
override foo = "string";
|
||
}
|
||
+let qq7 = new B();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override19.ts b/tests/cases/conformance/override/override19.ts
|
||
new file mode 100644
|
||
index 0000000000..63e5cd9994
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/override/override19.ts
|
||
@@ -0,0 +1,20 @@
|
||
+// @target: esnext
|
||
+// @noImplicitOverride: true
|
||
+
|
||
+type Foo = abstract new(...args: any) => any;
|
||
+declare function CreateMixin<C extends Foo, T extends Foo>(Context: C, Base: T): T & {
|
||
+ new (...args: any[]): { context: InstanceType<C> }
|
||
+}
|
||
+class Context {}
|
||
+
|
||
+class A {
|
||
+ doSomething() {}
|
||
+}
|
||
+
|
||
+class B extends CreateMixin(Context, A) {
|
||
+ override foo() {} // Remove override
|
||
+}
|
||
+
|
||
+class C extends CreateMixin(Context, A) {
|
||
+ override doSomethang() {} // Suggestion 'doSomething'
|
||
+}
|
||
diff --git a/tests/cases/conformance/override/override20.ts b/tests/cases/conformance/override/override20.ts
|
||
new file mode 100644
|
||
index 0000000000..9835cd9135
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/override/override20.ts
|
||
@@ -0,0 +1,34 @@
|
||
+// @target: esnext
|
||
+// @noImplicitOverride: true
|
||
+
|
||
+const Foo: C1 & C2 =
|
||
+ class {
|
||
+ m1() { }
|
||
+ m2() { }
|
||
+ }
|
||
+
|
||
+interface I1 {
|
||
+ m1(): void;
|
||
+}
|
||
+
|
||
+interface I2 {
|
||
+ m1(): void;
|
||
+ m2(): void;
|
||
+}
|
||
+
|
||
+interface C1 {
|
||
+ new(...args: any[]): I1;
|
||
+}
|
||
+
|
||
+interface C2 {
|
||
+ new(...args: any[]): I2;
|
||
+}
|
||
+
|
||
+export class Bar extends Foo {
|
||
+ m1() {
|
||
+ super.m1();
|
||
+ }
|
||
+ m2() {
|
||
+ super.m2();
|
||
+ }
|
||
+}
|
||
diff --git a/tests/cases/conformance/override/override_js1.ts b/tests/cases/conformance/override/override_js1.ts
|
||
index 75df72695e..d327d1dbcf 100644
|
||
--- a/tests/cases/conformance/override/override_js1.ts
|
||
+++ b/tests/cases/conformance/override/override_js1.ts
|
||
@@ -22,4 +22,6 @@ class C {
|
||
fooo (v) {}
|
||
/** @override */
|
||
bar(v) {}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qq8 = new D();
|
||
+let qq9 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/override/override_js4.ts b/tests/cases/conformance/override/override_js4.ts
|
||
new file mode 100644
|
||
index 0000000000..f5a7f1b6c4
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/override/override_js4.ts
|
||
@@ -0,0 +1,14 @@
|
||
+// @noImplicitOverride: true
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+
|
||
+// @Filename: a.js
|
||
+class A {
|
||
+ doSomething() {}
|
||
+}
|
||
+
|
||
+class B extends A {
|
||
+ /** @override */
|
||
+ doSomethang() {}
|
||
+}
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration16.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration16.ts
|
||
index b345892ec2..39a09037ca 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration16.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration16.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
foo();
|
||
foo() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q19 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration17.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration17.ts
|
||
index a709f7d7bc..08f7560759 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration17.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration17.ts
|
||
@@ -5,3 +5,4 @@ declare class Enumerator {
|
||
public item(): any;
|
||
constructor (o: any);
|
||
}
|
||
+let q22 = new Enumerator();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration19.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration19.ts
|
||
index 65d9bd0a57..5ed5520812 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration19.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration19.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
foo();
|
||
"foo"() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q18 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration20.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration20.ts
|
||
index 6c8540e833..a2025ab46f 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration20.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration20.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
0();
|
||
"0"() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q23 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration23.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration23.ts
|
||
index 5720f935a6..7ff1604575 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration23.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration23.ts
|
||
@@ -1,2 +1,3 @@
|
||
class C\u0032 {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q17 = new C\u0032();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration26.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration26.ts
|
||
index 4d5395733a..fbefb55710 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration26.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration26.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
var
|
||
public
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q20 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclarationIndexSignature1.ts b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclarationIndexSignature1.ts
|
||
index b99c0c6f48..bae31847e0 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclarationIndexSignature1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclarationIndexSignature1.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
[index:number]:number
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q21 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration1.ts b/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration1.ts
|
||
index b845118647..024f143cad 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration1.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
public constructor() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q24 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration5.ts b/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration5.ts
|
||
index f445d70c88..7305a4098d 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration5.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration5.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
private constructor() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q25 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic11.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic11.ts
|
||
index 5ebd8f13ae..bd99e7cfb1 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic11.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic11.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public() {}
|
||
}
|
||
+let q12 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic14.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic14.ts
|
||
index 23fb870f86..474e281b08 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic14.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic14.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public<T>() {}
|
||
}
|
||
+let q14 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic2.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic2.ts
|
||
index 30045cf9f0..dfc01652e7 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic2.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic2.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public;
|
||
}
|
||
+let q11 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic3.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic3.ts
|
||
index c2f462b71a..f38fc7ee97 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic3.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic3.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public = 1;
|
||
}
|
||
+let q9 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic4.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic4.ts
|
||
index fe0ed44cf0..41f075c30c 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic4.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic4.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public: number;
|
||
}
|
||
+let q13 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic5.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic5.ts
|
||
index 49db39132c..ea9593bb53 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic5.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic5.ts
|
||
@@ -2,3 +2,4 @@ class Outer
|
||
{
|
||
static public
|
||
}
|
||
+let q0 = new Outer();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass1.ts b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass1.ts
|
||
index 237910839d..a814947c9e 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass1.ts
|
||
@@ -1,2 +1,3 @@
|
||
class C<T> {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q38 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass2.ts b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass2.ts
|
||
index 949f220fbd..f4f517c52c 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass2.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass2.ts
|
||
@@ -1,2 +1,3 @@
|
||
class C<K,V> {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q40 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint1.ts b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint1.ts
|
||
index 585fa7dbe1..78a9ffb4db 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint1.ts
|
||
@@ -1,2 +1,3 @@
|
||
class C<T extends number> {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q39 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration1.ts b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration1.ts
|
||
index 56ba0579b0..7de740ebab 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration1.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
[a: string]: number
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q27 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration2.ts b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration2.ts
|
||
index 34108a6e71..f0224e9379 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration2.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration2.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
[a: string]: number
|
||
public v: number
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q29 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration3.ts b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration3.ts
|
||
index f2180413ca..25ea575259 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration3.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration3.ts
|
||
@@ -1,4 +1,5 @@
|
||
class C {
|
||
[a: string]: number;
|
||
public v: number
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q30 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration4.ts b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration4.ts
|
||
index 498ad89d82..42622da3af 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration4.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration4.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
[a: string]: number; public v: number
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q28 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration6.ts b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration6.ts
|
||
index af180f585f..b89c199246 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration6.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration6.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
static [x: string]: string;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q26 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/MemberVariableDeclarations/parserMemberVariableDeclaration5.ts b/tests/cases/conformance/parser/ecmascript5/MemberVariableDeclarations/parserMemberVariableDeclaration5.ts
|
||
index 98c4f9a75b..62e5062755 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/MemberVariableDeclarations/parserMemberVariableDeclaration5.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/MemberVariableDeclarations/parserMemberVariableDeclaration5.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
declare Foo;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q8 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Protected/Protected3.ts b/tests/cases/conformance/parser/ecmascript5/Protected/Protected3.ts
|
||
index 2b07e1ca9a..765e7b650a 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Protected/Protected3.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Protected/Protected3.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
protected constructor() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q37 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Protected/Protected5.ts b/tests/cases/conformance/parser/ecmascript5/Protected/Protected5.ts
|
||
index f0bf235a03..c1d4944d1e 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Protected/Protected5.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Protected/Protected5.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
protected static m() { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q34 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/Protected/Protected9.ts b/tests/cases/conformance/parser/ecmascript5/Protected/Protected9.ts
|
||
index 4e24e28ec1..5ce2aa474a 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/Protected/Protected9.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/Protected/Protected9.ts
|
||
@@ -1,3 +1,4 @@
|
||
class C {
|
||
constructor(protected p) { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q35 = new C(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546.ts b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546.ts
|
||
index bfb48ee0e3..29d488ffbc 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546.ts
|
||
@@ -1,3 +1,4 @@
|
||
export class Logger {
|
||
public
|
||
}
|
||
+let q32 = new Logger();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_1.ts b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_1.ts
|
||
index bfb48ee0e3..18eeed1a6d 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_1.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_1.ts
|
||
@@ -1,3 +1,4 @@
|
||
export class Logger {
|
||
public
|
||
}
|
||
+let q31 = new Logger();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_2.ts b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_2.ts
|
||
index ca1a460120..a4609ba88c 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_2.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509546_2.ts
|
||
@@ -3,3 +3,4 @@
|
||
export class Logger {
|
||
public
|
||
}
|
||
+let q23 = new Logger();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/parser/ecmascript5/parserUnicode3.ts b/tests/cases/conformance/parser/ecmascript5/parserUnicode3.ts
|
||
index bb5f00ea71..99802e72b5 100644
|
||
--- a/tests/cases/conformance/parser/ecmascript5/parserUnicode3.ts
|
||
+++ b/tests/cases/conformance/parser/ecmascript5/parserUnicode3.ts
|
||
@@ -1,2 +1,3 @@
|
||
class 剩下 {
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let q5 = new 剩下();
|
||
diff --git a/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement22.ts b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement22.ts
|
||
new file mode 100644
|
||
index 0000000000..87f569dbfb
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement22.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @target: esnext
|
||
+
|
||
+var async;
|
||
+for (async of [1, 2]) {}
|
||
diff --git a/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement23.ts b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement23.ts
|
||
new file mode 100644
|
||
index 0000000000..5a3601380b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement23.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @target: esnext
|
||
+
|
||
+async function foo(x: any) {
|
||
+ var async;
|
||
+ for await (async of x) {}
|
||
+}
|
||
diff --git a/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement24.ts b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement24.ts
|
||
new file mode 100644
|
||
index 0000000000..3846bd0a91
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/parser/ecmascript6/Iterators/parserForOfStatement24.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @target: esnext
|
||
+
|
||
+var async;
|
||
+for ((async) of [1, 2]);
|
||
diff --git a/tests/cases/conformance/salsa/inferringClassMembersFromAssignments3.ts b/tests/cases/conformance/salsa/inferringClassMembersFromAssignments3.ts
|
||
index 800bd368db..f713920ad5 100644
|
||
--- a/tests/cases/conformance/salsa/inferringClassMembersFromAssignments3.ts
|
||
+++ b/tests/cases/conformance/salsa/inferringClassMembersFromAssignments3.ts
|
||
@@ -14,3 +14,4 @@ class Derived extends Base {
|
||
this.p = 1
|
||
}
|
||
}
|
||
+let w1 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/salsa/plainJSBinderErrors.ts b/tests/cases/conformance/salsa/plainJSBinderErrors.ts
|
||
new file mode 100644
|
||
index 0000000000..d2019e3f78
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/plainJSBinderErrors.ts
|
||
@@ -0,0 +1,44 @@
|
||
+// @outdir: out/
|
||
+// @target: esnext
|
||
+// @allowJS: true
|
||
+// @filename: plainJSBinderErrors.js
|
||
+export default 12
|
||
+export default 13
|
||
+const await = 1
|
||
+const yield = 2
|
||
+async function f() {
|
||
+ const await = 3
|
||
+}
|
||
+function* g() {
|
||
+ const yield = 4
|
||
+}
|
||
+class C {
|
||
+ #constructor = 5
|
||
+ deleted() {
|
||
+ function container(f) {
|
||
+ delete f
|
||
+ }
|
||
+ var g = 6
|
||
+ delete g
|
||
+ delete container
|
||
+ }
|
||
+ evalArguments() {
|
||
+ const eval = 7
|
||
+ const arguments = 8
|
||
+ }
|
||
+ withOctal() {
|
||
+ const redundant = 010
|
||
+ with (redundant) {
|
||
+ return toFixed()
|
||
+ }
|
||
+ }
|
||
+ label() {
|
||
+ for(;;) {
|
||
+ label: var x = 1
|
||
+ break label
|
||
+ }
|
||
+ return x
|
||
+ }
|
||
+}
|
||
+const eval = 9
|
||
+const arguments = 10
|
||
diff --git a/tests/cases/conformance/salsa/plainJSRedeclare.ts b/tests/cases/conformance/salsa/plainJSRedeclare.ts
|
||
new file mode 100644
|
||
index 0000000000..be6831d0cd
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/plainJSRedeclare.ts
|
||
@@ -0,0 +1,6 @@
|
||
+// @outdir: out/
|
||
+// @allowJS: true
|
||
+// @filename: plainJSRedeclare.js
|
||
+const orbitol = 1
|
||
+var orbitol = 1 + false
|
||
+orbitol.toExponential()
|
||
diff --git a/tests/cases/conformance/salsa/plainJSRedeclare2.ts b/tests/cases/conformance/salsa/plainJSRedeclare2.ts
|
||
new file mode 100644
|
||
index 0000000000..7409b6c8fe
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/plainJSRedeclare2.ts
|
||
@@ -0,0 +1,7 @@
|
||
+// @outdir: out/
|
||
+// @allowJS: true
|
||
+// @checkJS: true
|
||
+// @filename: plainJSRedeclare.js
|
||
+const orbitol = 1
|
||
+var orbitol = 1 + false
|
||
+orbitol.toExponential()
|
||
diff --git a/tests/cases/conformance/salsa/plainJSRedeclare3.ts b/tests/cases/conformance/salsa/plainJSRedeclare3.ts
|
||
new file mode 100644
|
||
index 0000000000..1327fcfc17
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/plainJSRedeclare3.ts
|
||
@@ -0,0 +1,7 @@
|
||
+// @outdir: out/
|
||
+// @allowJS: true
|
||
+// @checkJS: false
|
||
+// @filename: plainJSRedeclare.js
|
||
+const orbitol = 1
|
||
+var orbitol = 1 + false
|
||
+orbitol.toExponential()
|
||
diff --git a/tests/cases/conformance/salsa/plainJSReservedStrict.ts b/tests/cases/conformance/salsa/plainJSReservedStrict.ts
|
||
new file mode 100644
|
||
index 0000000000..fbd654927d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/plainJSReservedStrict.ts
|
||
@@ -0,0 +1,7 @@
|
||
+// @outdir: out/
|
||
+// @target: esnext
|
||
+// @allowJS: true
|
||
+// @filename: plainJSReservedStrict.js
|
||
+"use strict"
|
||
+const eval = 1
|
||
+const arguments = 2
|
||
diff --git a/tests/cases/conformance/salsa/spellingUncheckedJS.ts b/tests/cases/conformance/salsa/spellingUncheckedJS.ts
|
||
new file mode 100644
|
||
index 0000000000..d5a1e8ac56
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/spellingUncheckedJS.ts
|
||
@@ -0,0 +1,51 @@
|
||
+// @noEmit: true
|
||
+// @allowJs: true
|
||
+// @filename: spellingUncheckedJS.js
|
||
+export var inModule = 1
|
||
+inmodule.toFixed()
|
||
+
|
||
+function f() {
|
||
+ var locals = 2 + true
|
||
+ locale.toFixed()
|
||
+ // @ts-expect-error
|
||
+ localf.toExponential()
|
||
+ // @ts-expect-error
|
||
+ "this is fine"
|
||
+}
|
||
+class Classe {
|
||
+ non = 'oui'
|
||
+ methode() {
|
||
+ // no error on 'this' references
|
||
+ return this.none
|
||
+ }
|
||
+}
|
||
+class Derivee extends Classe {
|
||
+ methode() {
|
||
+ // no error on 'super' references
|
||
+ return super.none
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+var object = {
|
||
+ spaaace: 3
|
||
+}
|
||
+object.spaaaace // error on read
|
||
+object.spaace = 12 // error on write
|
||
+object.fresh = 12 // OK
|
||
+other.puuuce // OK, from another file
|
||
+new Date().getGMTDate() // OK, from another file
|
||
+
|
||
+// No suggestions for globals from other files
|
||
+const atoc = setIntegral(() => console.log('ok'), 500)
|
||
+AudioBuffin // etc
|
||
+Jimmy
|
||
+Jon
|
||
+
|
||
+// @filename: other.js
|
||
+var Jimmy = 1
|
||
+var John = 2
|
||
+Jon // error, it's from the same file
|
||
+var other = {
|
||
+ puuce: 4
|
||
+}
|
||
diff --git a/tests/cases/conformance/salsa/typeFromJSInitializer2.ts b/tests/cases/conformance/salsa/typeFromJSInitializer2.ts
|
||
new file mode 100644
|
||
index 0000000000..c1d5857624
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/typeFromJSInitializer2.ts
|
||
@@ -0,0 +1,18 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+// @strictNullChecks: true
|
||
+// @noImplicitAny: true
|
||
+// @Filename: a.js
|
||
+
|
||
+/** @type {() => undefined} */
|
||
+function f1() {
|
||
+ return undefined;
|
||
+}
|
||
+const a = f1()
|
||
+
|
||
+/** @type {() => null} */
|
||
+function f2() {
|
||
+ return null;
|
||
+}
|
||
+const b = f2()
|
||
diff --git a/tests/cases/conformance/salsa/typeFromJSInitializer3.ts b/tests/cases/conformance/salsa/typeFromJSInitializer3.ts
|
||
new file mode 100644
|
||
index 0000000000..c5100df43d
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/typeFromJSInitializer3.ts
|
||
@@ -0,0 +1,18 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+// @strictNullChecks: false
|
||
+// @noImplicitAny: true
|
||
+// @Filename: a.js
|
||
+
|
||
+/** @type {() => undefined} */
|
||
+function f1() {
|
||
+ return undefined;
|
||
+}
|
||
+const a = f1()
|
||
+
|
||
+/** @type {() => null} */
|
||
+function f2() {
|
||
+ return null;
|
||
+}
|
||
+const b = f2()
|
||
diff --git a/tests/cases/conformance/salsa/typeFromJSInitializer4.ts b/tests/cases/conformance/salsa/typeFromJSInitializer4.ts
|
||
new file mode 100644
|
||
index 0000000000..02d16c45a2
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/salsa/typeFromJSInitializer4.ts
|
||
@@ -0,0 +1,29 @@
|
||
+// @allowJs: true
|
||
+// @checkJs: true
|
||
+// @noEmit: true
|
||
+// @strictNullChecks: false
|
||
+// @noImplicitAny: true
|
||
+// @Filename: a.js
|
||
+
|
||
+/** @type {number | undefined} */
|
||
+var n;
|
||
+
|
||
+// should get any on parameter initialisers
|
||
+function f(a = null, b = n, l = []) {
|
||
+ // a should be any
|
||
+ a = undefined
|
||
+ a = null
|
||
+ a = 1
|
||
+ a = true
|
||
+ a = {}
|
||
+ a = 'ok'
|
||
+
|
||
+ // b should be number | undefined, not any
|
||
+ b = 1
|
||
+ b = undefined
|
||
+ b = 'error'
|
||
+
|
||
+ // l should be any[]
|
||
+ l.push(1)
|
||
+ l.push('ok')
|
||
+}
|
||
diff --git a/tests/cases/conformance/salsa/typeFromPropertyAssignment23.ts b/tests/cases/conformance/salsa/typeFromPropertyAssignment23.ts
|
||
index 18923e0a5a..1dafa91c28 100644
|
||
--- a/tests/cases/conformance/salsa/typeFromPropertyAssignment23.ts
|
||
+++ b/tests/cases/conformance/salsa/typeFromPropertyAssignment23.ts
|
||
@@ -35,3 +35,6 @@ class NormalModule extends Module {
|
||
return 0
|
||
}
|
||
}
|
||
+let cc = new C();
|
||
+let dd = new D();
|
||
+let mo = new NormalModule();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/statements/for-inStatements/for-inStatementsAsyncIdentifier.ts b/tests/cases/conformance/statements/for-inStatements/for-inStatementsAsyncIdentifier.ts
|
||
new file mode 100644
|
||
index 0000000000..ae63dd3136
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/statements/for-inStatements/for-inStatementsAsyncIdentifier.ts
|
||
@@ -0,0 +1,4 @@
|
||
+// @target: esnext
|
||
+
|
||
+var async;
|
||
+for (async in { a: 1, b: 2 }) {}
|
||
diff --git a/tests/cases/conformance/statements/returnStatements/returnStatements.ts b/tests/cases/conformance/statements/returnStatements/returnStatements.ts
|
||
index ce764c1f11..945b98944c 100644
|
||
--- a/tests/cases/conformance/statements/returnStatements/returnStatements.ts
|
||
+++ b/tests/cases/conformance/statements/returnStatements/returnStatements.ts
|
||
@@ -21,3 +21,4 @@ function fn10(): I { return { id: 12 }; }
|
||
function fn11(): I { return new C(); }
|
||
function fn12(): C { return new D(); }
|
||
function fn13(): C { return null; }
|
||
+let q41 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/statements/throwStatements/throwInEnclosingStatements.ts b/tests/cases/conformance/statements/throwStatements/throwInEnclosingStatements.ts
|
||
index c5875327b5..313b2b7169 100644
|
||
--- a/tests/cases/conformance/statements/throwStatements/throwInEnclosingStatements.ts
|
||
+++ b/tests/cases/conformance/statements/throwStatements/throwInEnclosingStatements.ts
|
||
@@ -45,3 +45,4 @@ var aa = {
|
||
throw this;
|
||
}
|
||
}
|
||
+let q42 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/any/anyAsGenericFunctionCall.ts b/tests/cases/conformance/types/any/anyAsGenericFunctionCall.ts
|
||
index 9529b5b9a3..7996e18343 100644
|
||
--- a/tests/cases/conformance/types/any/anyAsGenericFunctionCall.ts
|
||
+++ b/tests/cases/conformance/types/any/anyAsGenericFunctionCall.ts
|
||
@@ -7,4 +7,6 @@ var b = x<string>('hello');
|
||
|
||
class C { foo: string; }
|
||
var c = x<C>(x);
|
||
-var d = x<any>(x);
|
||
\ No newline at end of file
|
||
+var d = x<any>(x);
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/any/assignAnyToEveryType.ts b/tests/cases/conformance/types/any/assignAnyToEveryType.ts
|
||
index 0af7d94d7b..aba7eb4753 100644
|
||
--- a/tests/cases/conformance/types/any/assignAnyToEveryType.ts
|
||
+++ b/tests/cases/conformance/types/any/assignAnyToEveryType.ts
|
||
@@ -42,4 +42,6 @@ M = x;
|
||
|
||
function k<T>(a: T) {
|
||
a = x;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/any/assignEveryTypeToAny.ts b/tests/cases/conformance/types/any/assignEveryTypeToAny.ts
|
||
index 8613550fc5..0f7f258e87 100644
|
||
--- a/tests/cases/conformance/types/any/assignEveryTypeToAny.ts
|
||
+++ b/tests/cases/conformance/types/any/assignEveryTypeToAny.ts
|
||
@@ -52,4 +52,6 @@ x = { f<T>(x: T) { return x; } }
|
||
|
||
function j<T>(a: T) {
|
||
x = a;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/conditional/variance.ts b/tests/cases/conformance/types/conditional/variance.ts
|
||
index 1dd5db5c67..433eab8e01 100644
|
||
--- a/tests/cases/conformance/types/conditional/variance.ts
|
||
+++ b/tests/cases/conformance/types/conditional/variance.ts
|
||
@@ -25,3 +25,5 @@ class Bar<T extends string> {
|
||
Bar.instance.push(this);
|
||
}
|
||
}
|
||
+
|
||
+let ba = new Bar();
|
||
diff --git a/tests/cases/conformance/types/contextualTypes/partiallyAnnotatedFunction/partiallyAnnotatedFunctionInferenceWithTypeParameter.ts b/tests/cases/conformance/types/contextualTypes/partiallyAnnotatedFunction/partiallyAnnotatedFunctionInferenceWithTypeParameter.ts
|
||
index 530d506f64..87069a602d 100644
|
||
--- a/tests/cases/conformance/types/contextualTypes/partiallyAnnotatedFunction/partiallyAnnotatedFunctionInferenceWithTypeParameter.ts
|
||
+++ b/tests/cases/conformance/types/contextualTypes/partiallyAnnotatedFunction/partiallyAnnotatedFunctionInferenceWithTypeParameter.ts
|
||
@@ -31,3 +31,6 @@ testRest((t1: D, t2, t3) => {})
|
||
testRest((t1, t2: D, t3) => {})
|
||
testRest((t2: D, ...t3) => {})
|
||
testRest((t2, ...t3: D[]) => {})
|
||
+
|
||
+
|
||
+let d = new D();
|
||
diff --git a/tests/cases/conformance/types/import/importTypeAmbient.ts b/tests/cases/conformance/types/import/importTypeAmbient.ts
|
||
index b1ba463777..3345c3ac06 100644
|
||
--- a/tests/cases/conformance/types/import/importTypeAmbient.ts
|
||
+++ b/tests/cases/conformance/types/import/importTypeAmbient.ts
|
||
@@ -28,8 +28,8 @@ declare module "foo2" {
|
||
item: Bar.I;
|
||
constructor(input: Baz.J);
|
||
}
|
||
+
|
||
}
|
||
-
|
||
let y: import("foo2").Bar.I = { a: "", b: 0 };
|
||
|
||
class Bar2 {
|
||
@@ -40,3 +40,6 @@ class Bar2 {
|
||
let shim: typeof import("foo2") = {
|
||
Bar: Bar2
|
||
};
|
||
+
|
||
+var a;
|
||
+let ba1 = new Bar2(a);
|
||
diff --git a/tests/cases/conformance/types/import/importTypeGenericTypes.ts b/tests/cases/conformance/types/import/importTypeGenericTypes.ts
|
||
index 5bc3aa7802..cf808fc6e3 100644
|
||
--- a/tests/cases/conformance/types/import/importTypeGenericTypes.ts
|
||
+++ b/tests/cases/conformance/types/import/importTypeGenericTypes.ts
|
||
@@ -29,9 +29,10 @@ class Bar<T> {
|
||
item: Bar.I<T>;
|
||
constructor(input: Baz.J<T>) {}
|
||
}
|
||
+let bbb = new Bar(null);
|
||
export { Bar }
|
||
|
||
-// @filename: usage.ts
|
||
+// @filename: usage.
|
||
export const x: import("./foo")<{x: number}> = { x: 0, y: 0, data: {x: 12} };
|
||
export let y: import("./foo2").Bar.I<{x: number}> = { a: "", b: 0, data: {x: 12} };
|
||
|
||
@@ -43,3 +44,5 @@ export class Bar2<T> {
|
||
export let shim: typeof import("./foo2") = {
|
||
Bar: Bar2
|
||
};
|
||
+
|
||
+let ba2 = new Bar2(1);
|
||
diff --git a/tests/cases/conformance/types/import/importTypeLocal.ts b/tests/cases/conformance/types/import/importTypeLocal.ts
|
||
index 4f29a22285..6fe5ab1c18 100644
|
||
--- a/tests/cases/conformance/types/import/importTypeLocal.ts
|
||
+++ b/tests/cases/conformance/types/import/importTypeLocal.ts
|
||
@@ -26,8 +26,11 @@ class Bar {
|
||
item: Bar.I;
|
||
constructor(input: Baz.J) {}
|
||
}
|
||
+let bbb = new Bar(null)
|
||
export { Bar }
|
||
|
||
+
|
||
+
|
||
// @filename: usage.ts
|
||
export const x: import("./foo") = { x: 0, y: 0 };
|
||
export let y: import("./foo2").Bar.I = { a: "", b: 0 };
|
||
@@ -40,3 +43,5 @@ export class Bar2 {
|
||
export let shim: typeof import("./foo2") = {
|
||
Bar: Bar2
|
||
};
|
||
+
|
||
+let ba2 = new Bar2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/intersection/intersectionOfUnionNarrowing.ts b/tests/cases/conformance/types/intersection/intersectionOfUnionNarrowing.ts
|
||
new file mode 100644
|
||
index 0000000000..0f67b66bff
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/intersection/intersectionOfUnionNarrowing.ts
|
||
@@ -0,0 +1,16 @@
|
||
+// @strict: true
|
||
+
|
||
+interface X {
|
||
+ a?: { aProp: string };
|
||
+ b?: { bProp: string };
|
||
+}
|
||
+type AorB = { a: object; b: undefined } | { a: undefined; b: object };
|
||
+
|
||
+declare const q: X & AorB;
|
||
+
|
||
+if (q.a !== undefined) {
|
||
+ q.a.aProp;
|
||
+} else {
|
||
+ // q.b is previously incorrectly inferred as potentially undefined
|
||
+ q.b.bProp;
|
||
+}
|
||
diff --git a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts
|
||
index 56ff157a67..7c7d0b13e0 100644
|
||
--- a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts
|
||
+++ b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts
|
||
@@ -658,3 +658,23 @@ const cf2 = <T extends { [P in K | "cool"]: string; }, K extends keyof T>(t: T,
|
||
const s: string = t[k];
|
||
t.cool;
|
||
};
|
||
+
|
||
+let shape = new Shape();
|
||
+let ta1 = new TaggedShape();
|
||
+let it = new Item();
|
||
+let op = new Options();
|
||
+let com1 = new Component();
|
||
+let c11 = new C();
|
||
+let c12 = new C1();
|
||
+let ba1 = new Base();
|
||
+let per = new Person(1);
|
||
+let oth = new OtherPerson(1);
|
||
+var aa;
|
||
+let com2 = new Component1(aa);
|
||
+let com3 = new Component2(aa);
|
||
+let a11 = new A();
|
||
+let b11 = new B();
|
||
+let fo = new Form();
|
||
+let sam = new SampleClass(1);
|
||
+let ano = new AnotherSampleClass(1);
|
||
+let unb = new Unbounded();
|
||
diff --git a/tests/cases/conformance/types/literal/literalTypes2.ts b/tests/cases/conformance/types/literal/literalTypes2.ts
|
||
index 57e7a0bc74..46b1479857 100644
|
||
--- a/tests/cases/conformance/types/literal/literalTypes2.ts
|
||
+++ b/tests/cases/conformance/types/literal/literalTypes2.ts
|
||
@@ -176,3 +176,6 @@ type Bit = 0 | 1;
|
||
|
||
let aa = makeArray<Bit>(0);
|
||
aa = append(aa, 1);
|
||
+
|
||
+let c1 = new C1();
|
||
+let c2 = new C2();
|
||
diff --git a/tests/cases/conformance/types/localTypes/localTypes2.ts b/tests/cases/conformance/types/localTypes/localTypes2.ts
|
||
index 79f1402c70..2b81f903ac 100644
|
||
--- a/tests/cases/conformance/types/localTypes/localTypes2.ts
|
||
+++ b/tests/cases/conformance/types/localTypes/localTypes2.ts
|
||
@@ -3,6 +3,7 @@ function f1() {
|
||
class C {
|
||
constructor(public x: number, public y: number) { }
|
||
}
|
||
+ let c = new C(1,2);
|
||
return C;
|
||
}
|
||
let C = f();
|
||
@@ -17,6 +18,7 @@ function f2() {
|
||
public x = x;
|
||
constructor(public y: number) { }
|
||
}
|
||
+ let c = new C(1);
|
||
return C;
|
||
}
|
||
let C = f(10);
|
||
@@ -31,6 +33,7 @@ function f3() {
|
||
public x = x;
|
||
public y = y;
|
||
}
|
||
+ let c = new C();
|
||
return C;
|
||
}
|
||
let C = f(10, 20);
|
||
diff --git a/tests/cases/conformance/types/localTypes/localTypes3.ts b/tests/cases/conformance/types/localTypes/localTypes3.ts
|
||
index 5eb3cf2850..7b1e536270 100644
|
||
--- a/tests/cases/conformance/types/localTypes/localTypes3.ts
|
||
+++ b/tests/cases/conformance/types/localTypes/localTypes3.ts
|
||
@@ -3,6 +3,7 @@ function f1() {
|
||
class C<X, Y> {
|
||
constructor(public x: X, public y: Y) { }
|
||
}
|
||
+ let c = new C(1,2);
|
||
return C;
|
||
}
|
||
let C = f();
|
||
@@ -17,6 +18,7 @@ function f2() {
|
||
public x = x;
|
||
constructor(public y: Y) { }
|
||
}
|
||
+ let c = new C(1);
|
||
return C;
|
||
}
|
||
let C = f(10);
|
||
@@ -31,6 +33,7 @@ function f3() {
|
||
public x = x;
|
||
public y = y;
|
||
}
|
||
+ let c = new C();
|
||
return C;
|
||
}
|
||
let C = f(10, "hello");
|
||
diff --git a/tests/cases/conformance/types/mapped/mappedTypeAsClauseRelationships.ts b/tests/cases/conformance/types/mapped/mappedTypeAsClauseRelationships.ts
|
||
new file mode 100644
|
||
index 0000000000..051192159e
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/mapped/mappedTypeAsClauseRelationships.ts
|
||
@@ -0,0 +1,27 @@
|
||
+// From original issue #45212:
|
||
+type Methods<T> = { [P in keyof T as T[P] extends Function ? P : never]: T[P] };
|
||
+type H<T> = T[keyof Methods<T>]; // Ok
|
||
+
|
||
+// `Filter<T>` only filters out some keys of `T`.
|
||
+type Filter<T> = { [P in keyof T as T[P] extends Function ? P : never]: T[P] };
|
||
+// `Modify<T>` might modify some keys of `T`.
|
||
+type Modify<T> = { [P in keyof T as P extends string? `bool${P}`: P]: T[P] };
|
||
+
|
||
+function fun<T>(val: T) {
|
||
+ let x: Filter<T> = val; // Ok
|
||
+ let y: Modify<T> = val; // Error
|
||
+}
|
||
+
|
||
+type FilterInclOpt<T> = { [P in keyof T as T[P] extends Function ? P : never]+?: T[P] };
|
||
+type ModifyInclOpt<T> = { [P in keyof T as P extends string? `bool${P}`: never ]+?: T[P] };
|
||
+type FilterExclOpt<T> = { [P in keyof T as T[P] extends Function ? P : never]-?: T[P] };
|
||
+type ModifyExclOpt<T> = { [P in keyof T as P extends string? `bool${P}`: never ]-?: T[P] };
|
||
+
|
||
+function fun2<T>(val: T) {
|
||
+ let x: FilterInclOpt<T> = val; // Ok
|
||
+ let y: ModifyInclOpt<T> = val; // Ok
|
||
+ let z: FilterExclOpt<T> = val; // Error
|
||
+ let w: ModifyExclOpt<T> = val; // Error
|
||
+}
|
||
+
|
||
+
|
||
diff --git a/tests/cases/conformance/types/mapped/mappedTypeProperties.ts b/tests/cases/conformance/types/mapped/mappedTypeProperties.ts
|
||
new file mode 100644
|
||
index 0000000000..407e0eaf56
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/mapped/mappedTypeProperties.ts
|
||
@@ -0,0 +1,42 @@
|
||
+// @declaration: true
|
||
+export type PlaceType = 'openSky' | 'roofed' | 'garage'
|
||
+type Before = {
|
||
+ model: 'hour' | 'day';
|
||
+ [placeType in PlaceType]: void;
|
||
+}
|
||
+
|
||
+type After = {
|
||
+ [placeType in PlaceType]: void;
|
||
+ model: 'hour' | 'day'
|
||
+}
|
||
+
|
||
+type AfterQuestion = {
|
||
+ [placeType in PlaceType]?: void;
|
||
+ model: 'hour' | 'day';
|
||
+}
|
||
+type AfterMethod = {
|
||
+ [placeType in PlaceType]?: void;
|
||
+ model(duration: number): 'hour' | 'day';
|
||
+}
|
||
+
|
||
+type AfterImplicit = {
|
||
+ [placeType in PlaceType]
|
||
+ model: 'hour' | 'day';
|
||
+}
|
||
+type AfterImplicitQ = {
|
||
+ [placeType in PlaceType]?
|
||
+ model: 'hour' | 'day'
|
||
+}
|
||
+
|
||
+interface I {
|
||
+ [P in PlaceType]: any
|
||
+}
|
||
+class C {
|
||
+ [P in PlaceType]: any
|
||
+}
|
||
+const D = class {
|
||
+ [P in PlaceType]: any
|
||
+}
|
||
+const E = class {
|
||
+ [P in 'a' | 'b']: any
|
||
+}
|
||
diff --git a/tests/cases/conformance/types/mapped/mappedTypes3.ts b/tests/cases/conformance/types/mapped/mappedTypes3.ts
|
||
index bf5a4399b0..6ef1918898 100644
|
||
--- a/tests/cases/conformance/types/mapped/mappedTypes3.ts
|
||
+++ b/tests/cases/conformance/types/mapped/mappedTypes3.ts
|
||
@@ -37,4 +37,6 @@ function f3(bb: BoxifiedBacon) {
|
||
let b = unboxify<Bacon>(bb); // Explicit type parameter required
|
||
let bool = b.isPerfect;
|
||
let weight = bb.weight;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let box = new Box();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/mapped/mappedTypesAndObjects.ts b/tests/cases/conformance/types/mapped/mappedTypesAndObjects.ts
|
||
index b3530b4696..66e25c6091 100644
|
||
--- a/tests/cases/conformance/types/mapped/mappedTypesAndObjects.ts
|
||
+++ b/tests/cases/conformance/types/mapped/mappedTypesAndObjects.ts
|
||
@@ -43,3 +43,5 @@ interface E3<T> extends Base {
|
||
class Form<T> {
|
||
private values: {[P in keyof T]?: T[P]} = {}
|
||
}
|
||
+
|
||
+let f = new Form();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/classWithProtectedProperty.ts b/tests/cases/conformance/types/members/classWithProtectedProperty.ts
|
||
index 96bc615c02..a37828eef1 100644
|
||
--- a/tests/cases/conformance/types/members/classWithProtectedProperty.ts
|
||
+++ b/tests/cases/conformance/types/members/classWithProtectedProperty.ts
|
||
@@ -24,4 +24,6 @@ class D extends C {
|
||
var r7: string = C.f();
|
||
var r8: string = C.g();
|
||
}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let d = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/indexSignatures1.ts b/tests/cases/conformance/types/members/indexSignatures1.ts
|
||
new file mode 100644
|
||
index 0000000000..f888275683
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/members/indexSignatures1.ts
|
||
@@ -0,0 +1,325 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+// @target: esnext
|
||
+
|
||
+// Symbol index signature checking
|
||
+
|
||
+const sym = Symbol();
|
||
+
|
||
+function gg3(x: { [key: string]: string }, y: { [key: symbol]: string }, z: { [sym]: number }) {
|
||
+ x = z;
|
||
+ y = z; // Error
|
||
+}
|
||
+
|
||
+// Overlapping index signatures
|
||
+
|
||
+function gg1(x: { [key: `a${string}`]: string, [key: `${string}a`]: string }, y: { [key: `a${string}a`]: string }) {
|
||
+ x = y;
|
||
+ y = x;
|
||
+}
|
||
+
|
||
+interface IX { [key: `a${string}`]: string, [key: `${string}a`]: string }
|
||
+interface IY { [key: `a${string}a`]: string }
|
||
+
|
||
+function gg2(x: IX, y: IY) {
|
||
+ x = y; // Error
|
||
+ y = x;
|
||
+}
|
||
+
|
||
+// Intersection of multiple applicable index signatures
|
||
+
|
||
+declare let combo: { [x: `foo-${string}`]: 'a' | 'b' } & { [x: `${string}-bar`]: 'b' | 'c' };
|
||
+const x1 = combo['foo-test']; // 'a' | 'b'
|
||
+const x2 = combo['test-bar']; // 'b' | 'c'
|
||
+const x3 = combo['foo-test-bar']; // 'b' (('a' | 'b') & ('b' | 'c'))
|
||
+
|
||
+declare var str: string;
|
||
+
|
||
+const x4 = combo[`foo-${str}`];
|
||
+const x5 = combo[`${str}-bar`];
|
||
+const x6 = combo[`foo-${str}-bar`];
|
||
+
|
||
+declare let combo2: { [x: `${string}xxx${string}` & `${string}yyy${string}`]: string };
|
||
+
|
||
+const x7 = combo2['axxxbyyyc'];
|
||
+const x8 = combo2['ayyyxxxbc'];
|
||
+const x9 = combo2['axxxbbbyc']; // Error
|
||
+
|
||
+// Property access on template pattern index signature
|
||
+
|
||
+declare let dom: { [x: `data${string}`]: string };
|
||
+const y1 = dom['data123'];
|
||
+const y2 = dom.data123;
|
||
+
|
||
+// Excess property checking for template pattern index signature
|
||
+
|
||
+dom = { data123: 'hello' };
|
||
+dom = { date123: 'hello' }; // Error
|
||
+
|
||
+// Contextual typing by index signature with template literal pattern
|
||
+
|
||
+type Funcs = {
|
||
+ [key: `s${string}`]: (x: string) => void,
|
||
+ [key: `n${string}`]: (x: number) => void,
|
||
+}
|
||
+
|
||
+const funcs: Funcs = {
|
||
+ sfoo: x => x.length, // x: string
|
||
+ nfoo: x => x * 2, // n: number
|
||
+}
|
||
+
|
||
+// Duplicate index signature checking
|
||
+
|
||
+type Duplicates = {
|
||
+ [key: string | number]: any; // Error
|
||
+ [key: number | symbol]: any; // Error
|
||
+ [key: symbol | `foo${string}`]: any; // Error
|
||
+ [key: `foo${string}`]: any; // Error
|
||
+}
|
||
+
|
||
+// Conflicting index signature checking
|
||
+
|
||
+type Conflicting = {
|
||
+ [key: `a${string}`]: 'a';
|
||
+ [key: `${string}a`]: 'b';
|
||
+ [key: `a${string}a`]: 'c'; // Error
|
||
+}
|
||
+
|
||
+// Invalid index signatures
|
||
+
|
||
+type Invalid<T extends string> = {
|
||
+ [key: 'a' | 'b' | 'c']: string; // Error
|
||
+ [key: T | number]: string; // Error
|
||
+ [key: Error]: string; // Error
|
||
+ [key: T & string]: string; // Error
|
||
+}
|
||
+
|
||
+// Intersections in index signatures
|
||
+
|
||
+type Tag1 = { __tag1__: void };
|
||
+type Tag2 = { __tag2__: void };
|
||
+
|
||
+type TaggedString1 = string & Tag1;
|
||
+type TaggedString2 = string & Tag2;
|
||
+
|
||
+declare let s0: string;
|
||
+declare let s1: TaggedString1;
|
||
+declare let s2: TaggedString2;
|
||
+declare let s3: TaggedString1 | TaggedString2;
|
||
+declare let s4: TaggedString1 & TaggedString2;
|
||
+
|
||
+interface I1 { [key: TaggedString1]: string }
|
||
+interface I2 { [key: TaggedString2]: string }
|
||
+interface I3 { [key: TaggedString1 | TaggedString2]: string }
|
||
+interface I4 { [key: TaggedString1 & TaggedString2]: string }
|
||
+
|
||
+declare let i1: I1;
|
||
+declare let i2: I2;
|
||
+declare let i3: I3;
|
||
+declare let i4: I4;
|
||
+
|
||
+i1[s0]; // Error
|
||
+i1[s1];
|
||
+i1[s2]; // Error
|
||
+i1[s3]; // Error
|
||
+i1[s4];
|
||
+
|
||
+i2[s0]; // Error
|
||
+i2[s1]; // Error
|
||
+i2[s2];
|
||
+i2[s3]; // Error
|
||
+i2[s4];
|
||
+
|
||
+i3[s0]; // Error
|
||
+i3[s1];
|
||
+i3[s2];
|
||
+i3[s3];
|
||
+i3[s4];
|
||
+
|
||
+i4[s0]; // Error
|
||
+i4[s1]; // Error
|
||
+i4[s2]; // Error
|
||
+i4[s3]; // Error
|
||
+i4[s4];
|
||
+
|
||
+i1 = i2; // Error
|
||
+i1 = i3;
|
||
+i1 = i4; // Error
|
||
+
|
||
+i2 = i1; // Error
|
||
+i2 = i3;
|
||
+i2 = i4; // Error
|
||
+
|
||
+i3 = i1; // Error
|
||
+i3 = i2; // Error
|
||
+i3 = i4; // Error
|
||
+
|
||
+i4 = i1;
|
||
+i4 = i2;
|
||
+i4 = i3;
|
||
+
|
||
+declare let o1: { [key: TaggedString1]: string };
|
||
+declare let o2: { [key: TaggedString2]: string };
|
||
+declare let o3: { [key: TaggedString1 | TaggedString2]: string };
|
||
+declare let o4: { [key: TaggedString1 & TaggedString2]: string };
|
||
+
|
||
+o1[s0]; // Error
|
||
+o1[s1];
|
||
+o1[s2]; // Error
|
||
+o1[s3]; // Error
|
||
+o1[s4];
|
||
+
|
||
+o2[s0]; // Error
|
||
+o2[s1]; // Error
|
||
+o2[s2];
|
||
+o2[s3]; // Error
|
||
+o2[s4];
|
||
+
|
||
+o3[s0]; // Error
|
||
+o3[s1];
|
||
+o3[s2];
|
||
+o3[s3];
|
||
+o3[s4];
|
||
+
|
||
+o4[s0]; // Error
|
||
+o4[s1]; // Error
|
||
+o4[s2]; // Error
|
||
+o4[s3]; // Error
|
||
+o4[s4];
|
||
+
|
||
+o1 = o2;
|
||
+o1 = o3;
|
||
+o1 = o4;
|
||
+
|
||
+o2 = o1;
|
||
+o2 = o3;
|
||
+o2 = o4;
|
||
+
|
||
+o3 = o1;
|
||
+o3 = o2;
|
||
+o3 = o4;
|
||
+
|
||
+o4 = o1;
|
||
+o4 = o2;
|
||
+o4 = o3;
|
||
+
|
||
+// Index signatures inferred from computed property names
|
||
+
|
||
+const obj10 = {
|
||
+ ['x']: 0 as const,
|
||
+ ['a' + 'b']: 1 as const,
|
||
+};
|
||
+
|
||
+const obj11 = {
|
||
+ [1]: 2 as const,
|
||
+ [1 + 2]: 3 as const,
|
||
+};
|
||
+
|
||
+const obj12 = {
|
||
+ [sym]: 4 as const,
|
||
+ [Symbol()]: 5 as const,
|
||
+};
|
||
+
|
||
+const obj13 = {
|
||
+ ['x']: 0 as const,
|
||
+ ['a' + 'b']: 1 as const,
|
||
+ [1]: 2 as const,
|
||
+ [1 + 2]: 3 as const,
|
||
+ [sym]: 4 as const,
|
||
+ [Symbol()]: 5 as const,
|
||
+};
|
||
+
|
||
+// Repros from #1863
|
||
+
|
||
+const system = Symbol('system');
|
||
+const SomeSytePlugin = Symbol('SomeSytePlugin');
|
||
+
|
||
+interface Plugs {
|
||
+ [key: symbol]: (...args: any) => unknown;
|
||
+}
|
||
+
|
||
+const plugins = {
|
||
+ "user": {} as Plugs,
|
||
+ [system]: {} as Plugs
|
||
+};
|
||
+
|
||
+plugins[system][SomeSytePlugin] = () => console.log('awsome');
|
||
+plugins[system][SomeSytePlugin]();
|
||
+
|
||
+var theAnswer: symbol = Symbol('secret');
|
||
+var obj = {} as Record<symbol, number>;
|
||
+obj[theAnswer] = 42;
|
||
+
|
||
+// Repro from #26470
|
||
+
|
||
+const directive = Symbol('directive');
|
||
+declare function foo<TArg, TRet, TDir>(options: { [x in string]: (arg: TArg) => TRet } & { [directive]?: TDir }): void;
|
||
+
|
||
+let case1 = foo({
|
||
+ [directive]: (x: string) => 'str',
|
||
+ addOne: (x: number) => x + 1,
|
||
+ double: (x: number) => x + x,
|
||
+});
|
||
+
|
||
+let case2 = foo({
|
||
+ addOne: (x: number) => x + 1,
|
||
+ double: (x: number) => x + x,
|
||
+ [directive]: (x: string) => 'str',
|
||
+});
|
||
+
|
||
+let case3 = foo({
|
||
+ [directive]: 'str',
|
||
+ addOne: (x: number) => x + 1,
|
||
+ double: (x: number) => x + x,
|
||
+});
|
||
+
|
||
+// Repros from #42192
|
||
+
|
||
+type Pseudo = `&:${string}`;
|
||
+
|
||
+const AmIPseudo1: Pseudo = '&:test';
|
||
+const AmIPseudo: Pseudo = '&'; // Error
|
||
+
|
||
+type PseudoDeclaration = { [key in Pseudo]: string };
|
||
+
|
||
+const test: PseudoDeclaration = { 'someKey' : 'someValue' }; // Error
|
||
+
|
||
+type FieldPattern = `/${string}`;
|
||
+
|
||
+const path1: FieldPattern = '/one';
|
||
+const path2: FieldPattern = 'two'; // Error
|
||
+
|
||
+type PathsObject = { [P in FieldPattern]: object; };
|
||
+const pathObject: PathsObject = 123; // Error
|
||
+
|
||
+type IdType = `${number}-${number}-${number}-${number}`
|
||
+const id: IdType = '0000-0000-0000-0001';
|
||
+
|
||
+type A = Record<IdType, string>;
|
||
+
|
||
+const a: A = { [id]: 'test' }
|
||
+
|
||
+let aid = a[id];
|
||
+
|
||
+// Repro from #44793
|
||
+
|
||
+interface AA {
|
||
+ a?: string;
|
||
+ b?: number;
|
||
+ [key: symbol]: string;
|
||
+}
|
||
+
|
||
+const aa: AA = { [sym]: '123' };
|
||
+
|
||
+const obj1: { [key: symbol]: string } = { [sym]: 'hello '};
|
||
+const obj2: { [key: string]: string } = { [sym]: 'hello '}; // Permitted for backwards compatibility
|
||
+const obj3: { [key: number]: string } = { [sym]: 'hello '}; // Error
|
||
+
|
||
+// Repro from #45772
|
||
+
|
||
+type Id = string & { __tag: 'id '};
|
||
+type Rec1 = { [key: Id]: number };
|
||
+type Rec2 = Record<Id, number>;
|
||
+
|
||
+type K1 = keyof Rec1; // Id
|
||
+type K2 = keyof Rec2; // Id
|
||
diff --git a/tests/cases/conformance/types/members/objectTypeHidingMembersOfObject.ts b/tests/cases/conformance/types/members/objectTypeHidingMembersOfObject.ts
|
||
index 1a7d6f2be4..bc489541ae 100644
|
||
--- a/tests/cases/conformance/types/members/objectTypeHidingMembersOfObject.ts
|
||
+++ b/tests/cases/conformance/types/members/objectTypeHidingMembersOfObject.ts
|
||
@@ -24,4 +24,6 @@ var b: {
|
||
valueOf(): void;
|
||
}
|
||
|
||
-var r4: void = b.valueOf();
|
||
\ No newline at end of file
|
||
+var r4: void = b.valueOf();
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/objectTypePropertyAccess.ts b/tests/cases/conformance/types/members/objectTypePropertyAccess.ts
|
||
index a54890fce9..e3c2cca547 100644
|
||
--- a/tests/cases/conformance/types/members/objectTypePropertyAccess.ts
|
||
+++ b/tests/cases/conformance/types/members/objectTypePropertyAccess.ts
|
||
@@ -26,3 +26,5 @@ var r8 = a.toString();
|
||
var r9 = a['toString']();
|
||
var r10 = a.foo;
|
||
var r11 = a['foo'];
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/objectTypeWithNumericProperty.ts b/tests/cases/conformance/types/members/objectTypeWithNumericProperty.ts
|
||
index 730ab43ec9..2c1b46b5d1 100644
|
||
--- a/tests/cases/conformance/types/members/objectTypeWithNumericProperty.ts
|
||
+++ b/tests/cases/conformance/types/members/objectTypeWithNumericProperty.ts
|
||
@@ -40,4 +40,6 @@ var b = {
|
||
var r1 = b[1];
|
||
var r2 = b[1.1];
|
||
var r3 = b['1'];
|
||
-var r4 = b['1.1'];
|
||
\ No newline at end of file
|
||
+var r4 = b['1.1'];
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/objectTypeWithStringNamedPropertyOfIllegalCharacters.ts b/tests/cases/conformance/types/members/objectTypeWithStringNamedPropertyOfIllegalCharacters.ts
|
||
index 766f56bdd2..d67c011129 100644
|
||
--- a/tests/cases/conformance/types/members/objectTypeWithStringNamedPropertyOfIllegalCharacters.ts
|
||
+++ b/tests/cases/conformance/types/members/objectTypeWithStringNamedPropertyOfIllegalCharacters.ts
|
||
@@ -50,3 +50,5 @@ var r2 = b[" "];
|
||
var r3 = b["a b"];
|
||
// BUG 817263
|
||
var r4 = b["~!@#$%^&*()_+{}|:'<>?\/.,`"];
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/typesWithSpecializedCallSignatures.ts b/tests/cases/conformance/types/members/typesWithSpecializedCallSignatures.ts
|
||
index 9eef3476f2..9aea8f6a18 100644
|
||
--- a/tests/cases/conformance/types/members/typesWithSpecializedCallSignatures.ts
|
||
+++ b/tests/cases/conformance/types/members/typesWithSpecializedCallSignatures.ts
|
||
@@ -38,4 +38,7 @@ a = i;
|
||
|
||
var r1: Derived1 = c.foo('hi');
|
||
var r2: Derived2 = c.foo('bye');
|
||
-var r3: Base = c.foo('hm');
|
||
\ No newline at end of file
|
||
+var r3: Base = c.foo('hm');
|
||
+
|
||
+// let dev1 = new Derived1();
|
||
+// let dev2 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/members/typesWithSpecializedConstructSignatures.ts b/tests/cases/conformance/types/members/typesWithSpecializedConstructSignatures.ts
|
||
index 7c84e76f14..522fad55bf 100644
|
||
--- a/tests/cases/conformance/types/members/typesWithSpecializedConstructSignatures.ts
|
||
+++ b/tests/cases/conformance/types/members/typesWithSpecializedConstructSignatures.ts
|
||
@@ -36,4 +36,7 @@ a = i;
|
||
|
||
var r1 = new C('hi');
|
||
var r2: Derived2 = new i('bye');
|
||
-var r3: Base = new a('hm');
|
||
\ No newline at end of file
|
||
+var r3: Base = new a('hm');
|
||
+
|
||
+let dev1 = new Derived1();
|
||
+let dev2 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts b/tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts
|
||
index 82e7de4584..97001142ae 100644
|
||
--- a/tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts
|
||
+++ b/tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts
|
||
@@ -8,4 +8,7 @@ class C {
|
||
class C2<T> {
|
||
x?: T;
|
||
f?(x: T) {}
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c = new C();
|
||
+let c2 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/namedTypes/optionalMethods.ts b/tests/cases/conformance/types/namedTypes/optionalMethods.ts
|
||
index 932521425f..dc7fe5cf4c 100644
|
||
--- a/tests/cases/conformance/types/namedTypes/optionalMethods.ts
|
||
+++ b/tests/cases/conformance/types/namedTypes/optionalMethods.ts
|
||
@@ -56,3 +56,6 @@ class Derived extends Base {
|
||
a = 1;
|
||
f(): number { return 1; }
|
||
}
|
||
+
|
||
+let ba1 = new Bar();
|
||
+let dev = new Derived();
|
||
diff --git a/tests/cases/conformance/types/never/neverType.ts b/tests/cases/conformance/types/never/neverType.ts
|
||
index d58471d62a..e548194630 100644
|
||
--- a/tests/cases/conformance/types/never/neverType.ts
|
||
+++ b/tests/cases/conformance/types/never/neverType.ts
|
||
@@ -91,3 +91,5 @@ test(() => "hello");
|
||
test(() => fail());
|
||
test(() => { throw new Error(); })
|
||
test(errorCallback);
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutReturnTypeAnnotationInference.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutReturnTypeAnnotationInference.ts
|
||
index 1cc499c7d6..16fe9f1bc5 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutReturnTypeAnnotationInference.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutReturnTypeAnnotationInference.ts
|
||
@@ -77,6 +77,7 @@ module M {
|
||
export var x = 1;
|
||
export class C { foo: string }
|
||
}
|
||
+let c2 = new M.C();
|
||
function foo11() {
|
||
return M;
|
||
}
|
||
@@ -119,4 +120,7 @@ module e1 { export var y = 1; }
|
||
function foo15() {
|
||
return e1;
|
||
}
|
||
-var r15 = foo15();
|
||
\ No newline at end of file
|
||
+var r15 = foo15();
|
||
+
|
||
+let c = new C();
|
||
+let c11 = new c1(1);
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts
|
||
index d5ff0c1f56..191117eb92 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts
|
||
@@ -35,4 +35,6 @@ var b = {
|
||
foo(x, x) { },
|
||
a: function foo(x: number, x: string) { },
|
||
b: <T>(x: T, x: T) => { }
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters.ts
|
||
index 34edfba671..d285c45d78 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters.ts
|
||
@@ -52,3 +52,5 @@ b.a(1);
|
||
b.a(1, 2);
|
||
b.b();
|
||
b.b(1);
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters2.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters2.ts
|
||
index 4f31726f82..bdd01987b0 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters2.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters2.ts
|
||
@@ -56,4 +56,6 @@ a(1);
|
||
a(1, 2);
|
||
a.foo(1);
|
||
a.foo(1, 2);
|
||
-a.foo(1, 2, 3);
|
||
\ No newline at end of file
|
||
+a.foo(1, 2, 3);
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/parametersWithNoAnnotationAreAny.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/parametersWithNoAnnotationAreAny.ts
|
||
index 432c905765..4c09ab1066 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/parametersWithNoAnnotationAreAny.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/parametersWithNoAnnotationAreAny.ts
|
||
@@ -26,4 +26,6 @@ var b = {
|
||
return x;
|
||
},
|
||
b: (x) => x
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsNotSubtypeOfNonSpecializedSignature.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsNotSubtypeOfNonSpecializedSignature.ts
|
||
index 01f33fbd7b..0aeddb657c 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsNotSubtypeOfNonSpecializedSignature.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsNotSubtypeOfNonSpecializedSignature.ts
|
||
@@ -62,3 +62,6 @@ var a3: {
|
||
foo(x: 'a');
|
||
foo<T extends String>(x: T);
|
||
}
|
||
+let c1 = new C();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsSubtypeOfNonSpecializedSignature.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsSubtypeOfNonSpecializedSignature.ts
|
||
index 70735b8edd..06ca07fbe8 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsSubtypeOfNonSpecializedSignature.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsSubtypeOfNonSpecializedSignature.ts
|
||
@@ -78,3 +78,6 @@ var a3: {
|
||
foo(x: 'a');
|
||
foo<T extends String>(x: T);
|
||
}
|
||
+let c1 = new C();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures.ts
|
||
index a8bf323850..6ea1c88cfb 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures.ts
|
||
@@ -23,3 +23,5 @@ var b = {
|
||
a: function foo(x: 'hi', y: 'hi') { },
|
||
b: (x: 'hi') => { }
|
||
}
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/typeParameterAsTypeArgument.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/typeParameterAsTypeArgument.ts
|
||
index ef33eef5d5..5e87397a9e 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/typeParameterAsTypeArgument.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/typeParameterAsTypeArgument.ts
|
||
@@ -24,4 +24,6 @@ interface I<T, U> {
|
||
|
||
//interface I<T, U extends T> {
|
||
// x: C<U, T>;
|
||
-//}
|
||
+//}
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.ts b/tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.ts
|
||
index 4ac60bd7f7..9a462477de 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.ts
|
||
@@ -29,4 +29,7 @@ var a: {
|
||
var b: {
|
||
new <T>(x: T, y: string): C2<T>;
|
||
new <T>(x: T, y: string): C; // error
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C(1);
|
||
+let c2 = new C2(1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexingResults.ts b/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexingResults.ts
|
||
index 3d7b7eba45..4af4aba5a9 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexingResults.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexingResults.ts
|
||
@@ -53,4 +53,6 @@ var r2b = b2['2'];
|
||
var r3 = b2['3'];
|
||
var r4 = b2[1];
|
||
var r5 = b2[2];
|
||
-var r6 = b2[3];
|
||
\ No newline at end of file
|
||
+var r6 = b2[3];
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexingResults.ts b/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexingResults.ts
|
||
index f51b8e461e..48ccea819f 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexingResults.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexingResults.ts
|
||
@@ -32,3 +32,5 @@ var b: { [x: string]: string } = { y: '' }
|
||
var r10 = b['y'];
|
||
var r11 = b['a'];
|
||
var r12 = b[1];
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNameWithoutTypeAnnotation.ts b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNameWithoutTypeAnnotation.ts
|
||
index 42f42eb312..ce53505fda 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNameWithoutTypeAnnotation.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNameWithoutTypeAnnotation.ts
|
||
@@ -18,4 +18,6 @@ var b = {
|
||
var r1 = (new C()).foo;
|
||
var r2 = (<I>null).foo;
|
||
var r3 = a.foo;
|
||
-var r4 = b.foo;
|
||
\ No newline at end of file
|
||
+var r4 = b.foo;
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNamesOfReservedWords.ts b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNamesOfReservedWords.ts
|
||
index 6673465381..e8589921f5 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNamesOfReservedWords.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/propertyNamesOfReservedWords.ts
|
||
@@ -273,4 +273,6 @@ enum E {
|
||
}
|
||
|
||
var r7 = E.abstract;
|
||
-var r8 = E.as;
|
||
\ No newline at end of file
|
||
+var r8 = E.as;
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyAccess.ts b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyAccess.ts
|
||
index dbea999036..9c6eea5968 100644
|
||
--- a/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyAccess.ts
|
||
+++ b/tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyAccess.ts
|
||
@@ -20,4 +20,6 @@ var r3 = a["a b"];
|
||
var b = {
|
||
"a b": 1
|
||
}
|
||
-var r4 = b["a b"];
|
||
\ No newline at end of file
|
||
+var r4 = b["a b"];
|
||
+
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/primitives/number/extendNumberInterface.ts b/tests/cases/conformance/types/primitives/number/extendNumberInterface.ts
|
||
index 6aa6325ee3..68641deedd 100644
|
||
--- a/tests/cases/conformance/types/primitives/number/extendNumberInterface.ts
|
||
+++ b/tests/cases/conformance/types/primitives/number/extendNumberInterface.ts
|
||
@@ -7,4 +7,4 @@ var x = 1;
|
||
var a: string = x.doStuff();
|
||
var b: string = x.doOtherStuff('hm');
|
||
var c: string = x['doStuff']();
|
||
-var d: string = x['doOtherStuff']('hm');
|
||
\ No newline at end of file
|
||
+var d: string = x['doOtherStuff']('hm');
|
||
diff --git a/tests/cases/conformance/types/primitives/undefined/invalidUndefinedValues.ts b/tests/cases/conformance/types/primitives/undefined/invalidUndefinedValues.ts
|
||
index 58a5a54386..572d96843f 100644
|
||
--- a/tests/cases/conformance/types/primitives/undefined/invalidUndefinedValues.ts
|
||
+++ b/tests/cases/conformance/types/primitives/undefined/invalidUndefinedValues.ts
|
||
@@ -28,4 +28,6 @@ x = f;
|
||
|
||
enum E { A }
|
||
x = E;
|
||
-x = E.A;
|
||
\ No newline at end of file
|
||
+x = E.A;
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/primitives/undefined/validUndefinedAssignments.ts b/tests/cases/conformance/types/primitives/undefined/validUndefinedAssignments.ts
|
||
index 71ae9f89a1..a1cad7a4a4 100644
|
||
--- a/tests/cases/conformance/types/primitives/undefined/validUndefinedAssignments.ts
|
||
+++ b/tests/cases/conformance/types/primitives/undefined/validUndefinedAssignments.ts
|
||
@@ -20,4 +20,6 @@ var h: { f(): void } = x;
|
||
|
||
function i<T>(a: T) {
|
||
a = x;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/rest/objectRestParameter.ts b/tests/cases/conformance/types/rest/objectRestParameter.ts
|
||
index 5b6faeb797..a18f4afc49 100644
|
||
--- a/tests/cases/conformance/types/rest/objectRestParameter.ts
|
||
+++ b/tests/cases/conformance/types/rest/objectRestParameter.ts
|
||
@@ -19,3 +19,4 @@ function foobar({ bar={}, ...opts }: any = {}) {
|
||
foobar();
|
||
foobar({ baz: 'hello' });
|
||
foobar({ bar: { greeting: 'hello' } });
|
||
+let t1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayOfFunctionTypes3.ts b/tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayOfFunctionTypes3.ts
|
||
index 9746dd287b..a518d15d97 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayOfFunctionTypes3.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayOfFunctionTypes3.ts
|
||
@@ -23,4 +23,6 @@ var c2: { (x: number): number; <T>(x: T): any; };
|
||
|
||
var z2 = [a2, b2, c2];
|
||
var r6 = z2[0];
|
||
-var r7 = r6(''); // any not string
|
||
\ No newline at end of file
|
||
+var r7 = r6(''); // any not string
|
||
+
|
||
+let c11 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads2.ts b/tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads2.ts
|
||
index 4ba6a76000..1d686dcc89 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads2.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads2.ts
|
||
@@ -25,4 +25,7 @@ var f2: {
|
||
var f3: {
|
||
new<T>(x: string): D<T>;
|
||
new<T>(x: number): D<T>;
|
||
-} = D;
|
||
\ No newline at end of file
|
||
+} = D;
|
||
+
|
||
+let c = new C('');
|
||
+let d = new D('');
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryOnClass.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryOnClass.ts
|
||
index 3e8ee82c74..4dd74a8b9b 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryOnClass.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryOnClass.ts
|
||
@@ -53,4 +53,7 @@ class D<T> {
|
||
|
||
var d: D<string>;
|
||
var r3: typeof D;
|
||
-var r4: typeof d;
|
||
\ No newline at end of file
|
||
+var r4: typeof d;
|
||
+
|
||
+let c1 = new C(1);
|
||
+let d1 = new D(1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts
|
||
index 5fb9d2233f..ce1748f526 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeQueryWithReservedWords.ts
|
||
@@ -12,3 +12,4 @@ interface IScope {
|
||
delete: typeof Controller.prototype.delete; // Should not error
|
||
var: typeof Controller.prototype.var; // Should not error
|
||
}
|
||
+let c2 = new Controller();
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofClass2.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofClass2.ts
|
||
index df1898a543..4dcf244525 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofClass2.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofClass2.ts
|
||
@@ -18,4 +18,7 @@ class D extends C {
|
||
var d: D;
|
||
|
||
var r1: typeof D;
|
||
-var r2: typeof d;
|
||
\ No newline at end of file
|
||
+var r2: typeof d;
|
||
+
|
||
+let c = new C(1);
|
||
+let d1 = new D(1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofModuleWithoutExports.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofModuleWithoutExports.ts
|
||
index 878885a8a9..53d74c3b71 100644
|
||
--- a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofModuleWithoutExports.ts
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofModuleWithoutExports.ts
|
||
@@ -3,6 +3,7 @@ module M {
|
||
class C {
|
||
foo: number;
|
||
}
|
||
+ var c = new C();
|
||
}
|
||
|
||
-var r: typeof M;
|
||
\ No newline at end of file
|
||
+var r: typeof M;
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThis.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThis.ts
|
||
new file mode 100644
|
||
index 0000000000..420604c550
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThis.ts
|
||
@@ -0,0 +1,146 @@
|
||
+// @noImplicitThis: true
|
||
+// @strict: true
|
||
+
|
||
+class Test {
|
||
+ data = {};
|
||
+ constructor() {
|
||
+ var copy: typeof this.data = {};
|
||
+ }
|
||
+}
|
||
+
|
||
+class Test1 {
|
||
+ data = { foo: '' };
|
||
+ ['this'] = '';
|
||
+ constructor() {
|
||
+ var copy: typeof this.data = { foo: '' };
|
||
+ var foo: typeof this.data.foo = '';
|
||
+
|
||
+ var self: typeof this = this;
|
||
+ self.data;
|
||
+
|
||
+ var str: typeof this.this = '';
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+function Test2() {
|
||
+ let x: typeof this.no = 1;
|
||
+}
|
||
+
|
||
+function Test3(this: { no: number }) {
|
||
+ let x: typeof this.no = 1;
|
||
+}
|
||
+
|
||
+function Test4(this: { no: number } | undefined) {
|
||
+ let x: typeof this.no = 1;
|
||
+}
|
||
+
|
||
+class Test5 {
|
||
+ no = 1;
|
||
+
|
||
+ f = () => {
|
||
+ // should not capture this.
|
||
+ let x: typeof this.no = 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+namespace Test6 {
|
||
+ export let f = () => {
|
||
+ let x: typeof this.no = 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+module Test7 {
|
||
+ export let f = () => {
|
||
+ let x: typeof this.no = 1;
|
||
+ }
|
||
+}
|
||
+
|
||
+const Test8 = () => {
|
||
+ let x: typeof this.no = 1;
|
||
+}
|
||
+
|
||
+class Test9 {
|
||
+ no = 0;
|
||
+ this = 0;
|
||
+
|
||
+ f() {
|
||
+ if (this instanceof Test9D1) {
|
||
+ const d1: typeof this = this;
|
||
+ d1.f1();
|
||
+ }
|
||
+
|
||
+ if (this instanceof Test9D2) {
|
||
+ const d2: typeof this = this;
|
||
+ d2.f2();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ g() {
|
||
+ if (this.no === 1) {
|
||
+ const no: typeof this.no = this.no;
|
||
+ }
|
||
+
|
||
+ if (this.this === 1) {
|
||
+ const no: typeof this.this = this.this;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+class Test9D1 {
|
||
+ f1() {}
|
||
+}
|
||
+
|
||
+class Test9D2 {
|
||
+ f2() {}
|
||
+}
|
||
+
|
||
+class Test10 {
|
||
+ a?: { b?: string }
|
||
+
|
||
+ foo() {
|
||
+ let a: typeof this.a = undefined as any;
|
||
+ if (this.a) {
|
||
+ let a: typeof this.a = undefined as any; // should narrow to { b?: string }
|
||
+ let b: typeof this.a.b = undefined as any;
|
||
+
|
||
+ if (this.a.b) {
|
||
+ let b: typeof this.a.b = undefined as any; // should narrow to string
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+class Test11 {
|
||
+ this?: { x?: string };
|
||
+
|
||
+ foo() {
|
||
+ const o = this;
|
||
+ let bar: typeof o.this = {};
|
||
+
|
||
+ if (o.this && o.this.x) {
|
||
+ let y: string = o.this.x; // should narrow to string
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+class Tests12 {
|
||
+ test1() { // OK
|
||
+ type Test = typeof this;
|
||
+ }
|
||
+
|
||
+ test2() { // OK
|
||
+ for (;;) {}
|
||
+ type Test = typeof this;
|
||
+ }
|
||
+
|
||
+ test3() { // expected no compile errors
|
||
+ for (const dummy in []) {}
|
||
+ type Test = typeof this;
|
||
+ }
|
||
+
|
||
+ test4() { // expected no compile errors
|
||
+ for (const dummy of []) {}
|
||
+ type Test = typeof this;
|
||
+ }
|
||
+}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThisWithImplicitThis.ts b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThisWithImplicitThis.ts
|
||
new file mode 100644
|
||
index 0000000000..d99cceaa58
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/specifyingTypes/typeQueries/typeofThisWithImplicitThis.ts
|
||
@@ -0,0 +1,5 @@
|
||
+// @noImplicitThis: false
|
||
+
|
||
+function Test1() {
|
||
+ let x: typeof this.no = 1
|
||
+}
|
||
diff --git a/tests/cases/conformance/types/spread/spreadDuplicate.ts b/tests/cases/conformance/types/spread/spreadDuplicate.ts
|
||
new file mode 100644
|
||
index 0000000000..f27a2529f0
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/spread/spreadDuplicate.ts
|
||
@@ -0,0 +1,21 @@
|
||
+// @strict: true
|
||
+// @declaration: true
|
||
+
|
||
+// Repro from #44438
|
||
+
|
||
+declare let a: { a: string };
|
||
+declare let b: { a?: string };
|
||
+declare let c: { a: string | undefined };
|
||
+declare let d: { a?: string | undefined };
|
||
+
|
||
+declare let t: boolean;
|
||
+
|
||
+let a1 = { a: 123, ...a }; // string (Error)
|
||
+let b1 = { a: 123, ...b }; // string | number
|
||
+let c1 = { a: 123, ...c }; // string | undefined (Error)
|
||
+let d1 = { a: 123, ...d }; // string | number
|
||
+
|
||
+let a2 = { a: 123, ...(t ? a : {}) }; // string | number
|
||
+let b2 = { a: 123, ...(t ? b : {}) }; // string | number
|
||
+let c2 = { a: 123, ...(t ? c : {}) }; // string | number
|
||
+let d2 = { a: 123, ...(t ? d : {}) }; // string | number
|
||
diff --git a/tests/cases/conformance/types/spread/spreadDuplicateExact.ts b/tests/cases/conformance/types/spread/spreadDuplicateExact.ts
|
||
new file mode 100644
|
||
index 0000000000..e395af4ce5
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/spread/spreadDuplicateExact.ts
|
||
@@ -0,0 +1,22 @@
|
||
+// @strict: true
|
||
+// @exactOptionalPropertyTypes: true
|
||
+// @declaration: true
|
||
+
|
||
+// Repro from #44438
|
||
+
|
||
+declare let a: { a: string };
|
||
+declare let b: { a?: string };
|
||
+declare let c: { a: string | undefined };
|
||
+declare let d: { a?: string | undefined };
|
||
+
|
||
+declare let t: boolean;
|
||
+
|
||
+let a1 = { a: 123, ...a }; // string (Error)
|
||
+let b1 = { a: 123, ...b }; // string | number
|
||
+let c1 = { a: 123, ...c }; // string | undefined (Error)
|
||
+let d1 = { a: 123, ...d }; // string | number | undefined
|
||
+
|
||
+let a2 = { a: 123, ...(t ? a : {}) }; // string | number
|
||
+let b2 = { a: 123, ...(t ? b : {}) }; // string | number
|
||
+let c2 = { a: 123, ...(t ? c : {}) }; // string | number | undefined
|
||
+let d2 = { a: 123, ...(t ? d : {}) }; // string | number | undefined
|
||
diff --git a/tests/cases/conformance/types/spread/spreadUnion4.ts b/tests/cases/conformance/types/spread/spreadUnion4.ts
|
||
new file mode 100644
|
||
index 0000000000..6a39ac3a3c
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/spread/spreadUnion4.ts
|
||
@@ -0,0 +1,4 @@
|
||
+declare const a: { x: () => void }
|
||
+declare const b: { x?: () => void }
|
||
+
|
||
+const c = { ...a, ...b };
|
||
diff --git a/tests/cases/conformance/types/thisType/fluentClasses.ts b/tests/cases/conformance/types/thisType/fluentClasses.ts
|
||
index c9e791cb6f..0aad4efe17 100644
|
||
--- a/tests/cases/conformance/types/thisType/fluentClasses.ts
|
||
+++ b/tests/cases/conformance/types/thisType/fluentClasses.ts
|
||
@@ -15,3 +15,5 @@ class C extends B {
|
||
}
|
||
var c: C;
|
||
var z = c.foo().bar().baz(); // Fluent pattern
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/thisType/thisTypeAndConstraints.ts b/tests/cases/conformance/types/thisType/thisTypeAndConstraints.ts
|
||
index f46b251c3b..c6091fd7a2 100644
|
||
--- a/tests/cases/conformance/types/thisType/thisTypeAndConstraints.ts
|
||
+++ b/tests/cases/conformance/types/thisType/thisTypeAndConstraints.ts
|
||
@@ -19,3 +19,6 @@ class B<T extends A> {
|
||
x = x.self();
|
||
}
|
||
}
|
||
+
|
||
+let a = new A();
|
||
+let b = new B();
|
||
diff --git a/tests/cases/conformance/types/thisType/thisTypeInClasses.ts b/tests/cases/conformance/types/thisType/thisTypeInClasses.ts
|
||
index 6c650341fb..0d3913de7e 100644
|
||
--- a/tests/cases/conformance/types/thisType/thisTypeInClasses.ts
|
||
+++ b/tests/cases/conformance/types/thisType/thisTypeInClasses.ts
|
||
@@ -47,3 +47,9 @@ class C5 {
|
||
let x2 = undefined as this;
|
||
}
|
||
}
|
||
+
|
||
+let c1 = new C1();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
+let c4 = new C4();
|
||
+let c5 = new C5();
|
||
diff --git a/tests/cases/conformance/types/thisType/thisTypeInFunctions3.ts b/tests/cases/conformance/types/thisType/thisTypeInFunctions3.ts
|
||
index 01d7fd0430..8fe03ac945 100644
|
||
--- a/tests/cases/conformance/types/thisType/thisTypeInFunctions3.ts
|
||
+++ b/tests/cases/conformance/types/thisType/thisTypeInFunctions3.ts
|
||
@@ -7,3 +7,6 @@ class Test extends Base {
|
||
this.check(this);
|
||
}
|
||
}
|
||
+
|
||
+let te = new Test();
|
||
+
|
||
diff --git a/tests/cases/conformance/types/thisType/thisTypeInTaggedTemplateCall.ts b/tests/cases/conformance/types/thisType/thisTypeInTaggedTemplateCall.ts
|
||
new file mode 100644
|
||
index 0000000000..c46933329b
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/thisType/thisTypeInTaggedTemplateCall.ts
|
||
@@ -0,0 +1,10 @@
|
||
+// @target: esnext
|
||
+
|
||
+class Foo {
|
||
+ static m<T>(this: new () => T, strings: TemplateStringsArray | string) {
|
||
+ return new this()
|
||
+ }
|
||
+}
|
||
+
|
||
+Foo.m`test`;
|
||
+(Foo.m)`test`;
|
||
diff --git a/tests/cases/conformance/types/tuple/readonlyArraysAndTuples2.ts b/tests/cases/conformance/types/tuple/readonlyArraysAndTuples2.ts
|
||
index 0f58f1971d..e03bc2a0c6 100644
|
||
--- a/tests/cases/conformance/types/tuple/readonlyArraysAndTuples2.ts
|
||
+++ b/tests/cases/conformance/types/tuple/readonlyArraysAndTuples2.ts
|
||
@@ -21,3 +21,5 @@ class A {
|
||
@someDec
|
||
k: readonly [string, number] = ['foo', 42];
|
||
}
|
||
+
|
||
+let a = new A();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeAliases/circularTypeAliasForUnionWithClass.ts b/tests/cases/conformance/types/typeAliases/circularTypeAliasForUnionWithClass.ts
|
||
index e7cca719f4..05fd3be85e 100644
|
||
--- a/tests/cases/conformance/types/typeAliases/circularTypeAliasForUnionWithClass.ts
|
||
+++ b/tests/cases/conformance/types/typeAliases/circularTypeAliasForUnionWithClass.ts
|
||
@@ -15,3 +15,7 @@ type T4 = string | I4;
|
||
class I4 {
|
||
[x: string]: T4;
|
||
}
|
||
+
|
||
+let i0 = new I0();
|
||
+let i3 = new I3();
|
||
+let i4 = new I4();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeAliases/classDoesNotDependOnBaseTypes.ts b/tests/cases/conformance/types/typeAliases/classDoesNotDependOnBaseTypes.ts
|
||
index 4cc3a72395..96d1b74b83 100644
|
||
--- a/tests/cases/conformance/types/typeAliases/classDoesNotDependOnBaseTypes.ts
|
||
+++ b/tests/cases/conformance/types/typeAliases/classDoesNotDependOnBaseTypes.ts
|
||
@@ -9,4 +9,6 @@ var x: StringTree;
|
||
if (typeof x !== "string") {
|
||
x[0] = "";
|
||
x[0] = new StringTreeCollection;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let s1 = new StringTreeCollection();
|
||
diff --git a/tests/cases/conformance/types/typeAliases/typeAliases.ts b/tests/cases/conformance/types/typeAliases/typeAliases.ts
|
||
index b9d28f4cc3..32eb8473bf 100644
|
||
--- a/tests/cases/conformance/types/typeAliases/typeAliases.ts
|
||
+++ b/tests/cases/conformance/types/typeAliases/typeAliases.ts
|
||
@@ -77,4 +77,6 @@ var x: [string, boolean];
|
||
f16(x);
|
||
|
||
var y: StringAndBoolean = ["1", false];
|
||
-y[0].toLowerCase();
|
||
\ No newline at end of file
|
||
+y[0].toLowerCase();
|
||
+
|
||
+let c7 = new C7();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeArgumentLists/callGenericFunctionWithZeroTypeArguments.ts b/tests/cases/conformance/types/typeParameters/typeArgumentLists/callGenericFunctionWithZeroTypeArguments.ts
|
||
index 9a21c48ee1..b4a8dc7ba5 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeArgumentLists/callGenericFunctionWithZeroTypeArguments.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeArgumentLists/callGenericFunctionWithZeroTypeArguments.ts
|
||
@@ -33,4 +33,7 @@ interface I2<T> {
|
||
f(x: T): T;
|
||
}
|
||
var i2: I2<number>;
|
||
-var r7 = i2.f(1);
|
||
\ No newline at end of file
|
||
+var r7 = i2.f(1);
|
||
+
|
||
+let c1 = new C();
|
||
+let c2 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction.ts b/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction.ts
|
||
index ba1c5b003f..7490e2bd94 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction.ts
|
||
@@ -58,4 +58,7 @@ function foo2<T extends { (): void }, U extends { (): void }>(x: T, y: U) {
|
||
//function foo2<T extends { (): void }, U extends T>(x: T, y: U) {
|
||
// foo(x);
|
||
// foo(y);
|
||
-//}
|
||
\ No newline at end of file
|
||
+//}
|
||
+
|
||
+let c11 = new C();
|
||
+let c12 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction3.ts b/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction3.ts
|
||
index 6c32014789..dec6cdd0bd 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction3.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction3.ts
|
||
@@ -38,4 +38,7 @@ var c2: { <T>(x: T): T; <T>(x: T, y: T): T };
|
||
var r9 = foo(function <U>(x: U) { return x; });
|
||
var r10 = foo(<U extends string>(x: U) => x);
|
||
var r12 = foo(i2);
|
||
-var r15 = foo(c2);
|
||
\ No newline at end of file
|
||
+var r15 = foo(c2);
|
||
+
|
||
+let c11 = new C();
|
||
+let c12 = new C2()
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts
|
||
index 60766c7e5e..4bd0b6c27f 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts
|
||
@@ -34,4 +34,6 @@ class C2<T extends Date, U extends Date> {
|
||
// var x: U;
|
||
// x.getDate();
|
||
// }
|
||
-//}
|
||
\ No newline at end of file
|
||
+//}
|
||
+let c1 = new C();
|
||
+let c2 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints.ts
|
||
index b89016ecff..c10bef3300 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints.ts
|
||
@@ -31,4 +31,5 @@ var b = {
|
||
}
|
||
}
|
||
|
||
-var r4 = b.foo(new Date());
|
||
\ No newline at end of file
|
||
+var r4 = b.foo(new Date());
|
||
+let c = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints2.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints2.ts
|
||
index 10f3a49884..a9992c5aa1 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints2.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints2.ts
|
||
@@ -61,7 +61,7 @@ var a: {
|
||
var r3 = a<A, A>().foo();
|
||
var r3b = a()['foo']();
|
||
// parameter supplied for type argument inference to succeed
|
||
-var aB = new B();
|
||
+// var aB = new B();
|
||
var r3c = a(aB, aB).foo();
|
||
var r3d = a(aB, aB)['foo']();
|
||
|
||
@@ -78,4 +78,7 @@ var b = {
|
||
// }
|
||
//}
|
||
|
||
-var r4 = b.foo(aB, aB); // no inferences for T so constraint isn't satisfied, error
|
||
\ No newline at end of file
|
||
+var r4 = b.foo(aB, aB); // no inferences for T so constraint isn't satisfied, error
|
||
+
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints3.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints3.ts
|
||
index 6167485f1b..73a10ae071 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints3.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints3.ts
|
||
@@ -53,4 +53,6 @@ var b = {
|
||
}
|
||
}
|
||
|
||
-var r4 = b.foo(new B()); // valid call to an invalid function
|
||
\ No newline at end of file
|
||
+var r4 = b.foo(new B()); // valid call to an invalid function
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithoutConstraints.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithoutConstraints.ts
|
||
index 1660d67a4e..b46569e9a4 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithoutConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithoutConstraints.ts
|
||
@@ -28,4 +28,6 @@ var b = {
|
||
}
|
||
}
|
||
|
||
-var r4 = b.foo(1);
|
||
\ No newline at end of file
|
||
+var r4 = b.foo(1);
|
||
+
|
||
+let c = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterUsedAsConstraint.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterUsedAsConstraint.ts
|
||
index bade67badd..b9f3e54bb7 100644
|
||
--- a/tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterUsedAsConstraint.ts
|
||
+++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterUsedAsConstraint.ts
|
||
@@ -32,3 +32,10 @@ var a3: { <T extends Date, U extends T>(): void }
|
||
var a4: { <T extends U, U extends Date>(): void }
|
||
var a5: { <T extends U, U extends V, V>(): void }
|
||
var a6: { <T, U extends T, V extends U>(): void }
|
||
+
|
||
+let c1 = new C();
|
||
+let c2 = new C2();
|
||
+let c3 = new C3();
|
||
+let c4 = new C4();
|
||
+let c5 = new C5();
|
||
+let c6 = new C6();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignabilityInInheritance.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignabilityInInheritance.ts
|
||
index cc154308a1..5dfa8f94d3 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignabilityInInheritance.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignabilityInInheritance.ts
|
||
@@ -85,4 +85,8 @@ var r3 = foo3(a); // any
|
||
|
||
declare function foo18(x: {}): {};
|
||
declare function foo18(x: any): any;
|
||
-var r3 = foo3(a); // any
|
||
\ No newline at end of file
|
||
+var r3 = foo3(a); // any
|
||
+
|
||
+let aa1 = new A();
|
||
+let aa2 = new A2();
|
||
+let ccc = new CC();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType.ts
|
||
index 1c3bcc71ce..03e0089697 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType.ts
|
||
@@ -38,6 +38,7 @@ function foo<T, U /*extends T*/, V extends Date>(x: T, y: U, z: V) {
|
||
z = a;
|
||
}
|
||
|
||
+let cc = new C();
|
||
//function foo<T, U extends T, V extends Date>(x: T, y: U, z: V) {
|
||
// x = a;
|
||
// y = a;
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType2.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType2.ts
|
||
index 26f3eee594..74a517176d 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType2.ts
|
||
@@ -127,3 +127,6 @@ interface I20 {
|
||
[x: string]: {};
|
||
foo: any;
|
||
}
|
||
+let aa = new A();
|
||
+let aa2 = new A2()
|
||
+let ccc = new c();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers.ts
|
||
index d7a94cc862..464edb67d3 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers.ts
|
||
@@ -40,6 +40,8 @@ module SimpleTypes {
|
||
a2 = b;
|
||
a2 = t2;
|
||
a2 = t;
|
||
+ let ss = new S();
|
||
+ let tt = new T();
|
||
}
|
||
|
||
module ObjectTypes {
|
||
@@ -81,5 +83,6 @@ module ObjectTypes {
|
||
a2 = b;
|
||
a2 = t2;
|
||
a2 = t;
|
||
-
|
||
+ let ss = new S();
|
||
+ let tt = new T();
|
||
}
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers2.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers2.ts
|
||
index a45da06482..a9e3bc6141 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers2.ts
|
||
@@ -39,3 +39,5 @@ b2 = a2;
|
||
a2 = b;
|
||
a2 = t2;
|
||
a2 = t;
|
||
+let qu1 = new S();
|
||
+let qu2 = new T();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers3.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers3.ts
|
||
index 6e9a210db4..b96693de94 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers3.ts
|
||
@@ -39,3 +39,5 @@ b2 = a2;
|
||
a2 = b;
|
||
a2 = t2;
|
||
a2 = t;
|
||
+let qi3 = new S();
|
||
+let qi4 = new T();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembersNumericNames.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembersNumericNames.ts
|
||
index b25c949f42..7372988241 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembersNumericNames.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembersNumericNames.ts
|
||
@@ -39,3 +39,5 @@ b2 = a2;
|
||
a2 = b;
|
||
a2 = t2;
|
||
a2 = t;
|
||
+let qi1 = new S();
|
||
+let qi2 = new T();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts
|
||
index 9e6cd52ac2..c511bfa71a 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts
|
||
@@ -66,4 +66,8 @@ interface I extends A {
|
||
a16: <T extends Base>(x: T) => number[]; // ok
|
||
a17: <T>(x: (a: T) => T) => T[]; // ok
|
||
a18: <T>(x: (a: T) => T) => T[]; // ok, no inferences for T but assignable to any
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance4.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance4.ts
|
||
index dd10ee7646..bb1f737657 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance4.ts
|
||
@@ -46,4 +46,8 @@ interface I extends A {
|
||
a16: <T>(x: { a: T; b: T }) => T[]; // ok, more general parameter type
|
||
a17: <T>(x: (a: T) => T) => T[]; // ok
|
||
a18: (x: <T>(a: T) => T) => any[]; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts
|
||
index bf60d6518c..ef4e179af9 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts
|
||
@@ -45,4 +45,7 @@ interface I extends B {
|
||
a12: <T extends Array<Base>>(x: Array<Base>, y: T) => Array<Derived>; // ok, less specific parameter type
|
||
a13: <T extends Array<Derived>>(x: Array<Base>, y: T) => T; // ok, T = Array<Derived>, satisfies constraint, contextual signature instantiation succeeds
|
||
a14: <T, U>(x: { a: T; b: U }) => T; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance2.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance2.ts
|
||
index 65e4f4c962..8d842b7d7e 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance2.ts
|
||
@@ -66,4 +66,8 @@ interface I extends A {
|
||
a16: new <T extends Base>(x: T) => number[]; // ok
|
||
a17: new <T>(x: new (a: T) => T) => T[]; // ok
|
||
a18: new <T>(x: new (a: T) => T) => T[]; // ok, no inferences for T but assignable to any
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance4.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance4.ts
|
||
index 9dfcf5548a..8b57d6a8c7 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance4.ts
|
||
@@ -56,4 +56,7 @@ interface I extends A {
|
||
a18: new <T extends Base>(x: T) => number[]; // ok, more general parameter type
|
||
a19: new <T extends Base>(x: new (a: T) => T) => T[]; // ok
|
||
a20: new (x: new <T extends Base>(a: T) => T) => any[]; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance5.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance5.ts
|
||
index f33820218e..6ba5e454f6 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance5.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance5.ts
|
||
@@ -45,4 +45,7 @@ interface I extends B {
|
||
a12: new <T extends Array<Base>>(x: Array<Base>, y: T) => Array<Derived>; // ok, less specific parameter type
|
||
a13: new <T extends Array<Derived>>(x: Array<Base>, y: T) => T; // ok, T = Array<Derived>, satisfies constraint, contextual signature instantiation succeeds
|
||
a14: new <T, U>(x: { a: T; b: U }) => T; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qi14 = new Derived();
|
||
+let qi15 = new Derived2();
|
||
+let qi16 = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/everyTypeAssignableToAny.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/everyTypeAssignableToAny.ts
|
||
index 6c8670abaa..407e128678 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/everyTypeAssignableToAny.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/everyTypeAssignableToAny.ts
|
||
@@ -53,6 +53,8 @@ function foo<T, U /*extends T*/, V extends Date>(x: T, y: U, z: V) {
|
||
a = y;
|
||
a = z;
|
||
}
|
||
+
|
||
+let ccc = new C();
|
||
//function foo<T, U extends T, V extends Date>(x: T, y: U, z: V) {
|
||
// a = x;
|
||
// a = y;
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/nullAssignableToEveryType.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/nullAssignableToEveryType.ts
|
||
index b0f55331d7..cc755558ff 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/nullAssignableToEveryType.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/nullAssignableToEveryType.ts
|
||
@@ -35,7 +35,7 @@ function foo<T, U, V extends Date>(x: T, y: U, z: V) {
|
||
y = null;
|
||
z = null;
|
||
}
|
||
-
|
||
+let cc = new C();
|
||
//function foo<T, U extends T, V extends Date>(x: T, y: U, z: V) {
|
||
// x = null;
|
||
// y = null;
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/undefinedAssignableToEveryType.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/undefinedAssignableToEveryType.ts
|
||
index 5fc14274a1..f296781ef1 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/undefinedAssignableToEveryType.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/undefinedAssignableToEveryType.ts
|
||
@@ -35,6 +35,7 @@ function foo<T, U, V extends Date>(x: T, y: U, z: V) {
|
||
y = undefined;
|
||
z = undefined;
|
||
}
|
||
+let cc = new C();
|
||
//function foo<T, U extends T, V extends Date>(x: T, y: U, z: V) {
|
||
// x = undefined;
|
||
// y = undefined;
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts
|
||
index 5f02210478..1e1889cc10 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts
|
||
@@ -23,4 +23,7 @@ var r11 = true ? base : derived2;
|
||
|
||
function foo5<T, U>(t: T, u: U): Object {
|
||
return true ? t : u; // BCT is Object
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let qy10 = new Derived();
|
||
+let qy11 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions2.ts b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions2.ts
|
||
index 8e6f345ea4..f1512e3536 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions2.ts
|
||
@@ -21,4 +21,6 @@ function foo2<T extends U, U>(t: T, u: U) { // Error for referencing own type pa
|
||
|
||
function foo3<T extends U, U extends V, V>(t: T, u: U) {
|
||
return true ? t : u;
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qy8 = new Derived();
|
||
+let qy9 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts b/tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts
|
||
index 0f498c570a..13ecea225a 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts
|
||
@@ -99,6 +99,8 @@ function foo4<T extends Base, U extends Base>(t: T, u: U) {
|
||
|
||
var k: Base[] = [t, u];
|
||
}
|
||
+let qy8 = new Derived();
|
||
+let qy9 = new Derived2();
|
||
|
||
//function foo3<T extends U, U extends Derived>(t: T, u: U) {
|
||
// var a = [t, t]; // T[]
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/instanceOf/narrowingConstrainedTypeVariable.ts b/tests/cases/conformance/types/typeRelationships/instanceOf/narrowingConstrainedTypeVariable.ts
|
||
index 04623503f9..491876d8ff 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/instanceOf/narrowingConstrainedTypeVariable.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/instanceOf/narrowingConstrainedTypeVariable.ts
|
||
@@ -34,3 +34,6 @@ function f3<T extends E>(v: T | { x: string }) {
|
||
const y: { x: string } = v;
|
||
}
|
||
}
|
||
+let qy5 = new C();
|
||
+let qy6 = new D();
|
||
+let qy7 = new E();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/recursiveTypes/arrayLiteralsWithRecursiveGenerics.ts b/tests/cases/conformance/types/typeRelationships/recursiveTypes/arrayLiteralsWithRecursiveGenerics.ts
|
||
index e7260831a4..35de332a33 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/recursiveTypes/arrayLiteralsWithRecursiveGenerics.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/recursiveTypes/arrayLiteralsWithRecursiveGenerics.ts
|
||
@@ -22,4 +22,8 @@ var ys = [list, list2]; // {}[]
|
||
var zs = [list, null]; // List<number>[]
|
||
|
||
var myDerivedList: DerivedList<number>;
|
||
-var as = [list, myDerivedList]; // List<number>[]
|
||
\ No newline at end of file
|
||
+var as = [list, myDerivedList]; // List<number>[]
|
||
+
|
||
+let li = new List();
|
||
+let der = new DerivedList();
|
||
+let my = new MyList();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypeInGenericConstraint.ts b/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypeInGenericConstraint.ts
|
||
index ac6286bd81..e4d37f2abe 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypeInGenericConstraint.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypeInGenericConstraint.ts
|
||
@@ -10,4 +10,7 @@ class D<T> {
|
||
x: G<G<T>>;
|
||
}
|
||
|
||
-var c1 = new Foo<D<string>>(); // ok, circularity in assignment compat check causes success
|
||
\ No newline at end of file
|
||
+var c1 = new Foo<D<string>>(); // ok, circularity in assignment compat check causes success
|
||
+let g = new G();
|
||
+let foo = new Foo();
|
||
+let d = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypesUsedAsFunctionParameters.ts b/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypesUsedAsFunctionParameters.ts
|
||
index 6eba1f2836..6cdf1db8be 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypesUsedAsFunctionParameters.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/recursiveTypes/recursiveTypesUsedAsFunctionParameters.ts
|
||
@@ -40,4 +40,7 @@ function other<T extends List<U>, U>() {
|
||
|
||
var r = foo5(list);
|
||
var r2 = foo5(myList);
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let li = new List();
|
||
+let my = new MyList();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts
|
||
index 24f2ab71d4..ced02bcefe 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts
|
||
@@ -88,3 +88,7 @@ var r19 = true ? null : new Object();
|
||
|
||
var r20 = true ? {} : null;
|
||
var r20 = true ? null : {};
|
||
+
|
||
+let c11 = new C1();
|
||
+let c12 = new C2();
|
||
+let c13 = new c();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts
|
||
index c7e9c0fc8e..0f00bc8c02 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts
|
||
@@ -97,4 +97,6 @@ function f15<T, U extends T>(x: any) { }
|
||
|
||
function f16<T extends String, U extends T>(x: 'a');
|
||
function f16<T extends String, U extends T>(x: U);
|
||
-function f16<T extends String, U extends T>(x: any) { }
|
||
\ No newline at end of file
|
||
+function f16<T extends String, U extends T>(x: any) { }
|
||
+
|
||
+let ccc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfAny.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfAny.ts
|
||
index 0e5df54319..d785a27b7b 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfAny.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfAny.ts
|
||
@@ -130,4 +130,7 @@ interface I19 {
|
||
interface I20 {
|
||
[x: string]: any;
|
||
foo: {};
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let a1 = new A();
|
||
+let a2 = new A2();
|
||
+let c1 = new c();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints2.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints2.ts
|
||
index 9edf4f5f41..990e4b8cc5 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints2.ts
|
||
@@ -154,4 +154,7 @@ function f20<T extends Number>(x: T) {
|
||
function f21<T extends Number>(x: T) {
|
||
var r20 = true ? {} : x; // ok
|
||
var r20 = true ? x : {}; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+
|
||
+let c1 = new C1();
|
||
+let c2 = new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures2.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures2.ts
|
||
index e8ae73c5fb..4a29484b12 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures2.ts
|
||
@@ -5,6 +5,7 @@ class Derived extends Base { bar: string; }
|
||
class Derived2 extends Derived { baz: string; }
|
||
class OtherDerived extends Base { bing: string; }
|
||
|
||
+
|
||
declare function foo1(a: (x: number) => number[]): typeof a;
|
||
declare function foo1(a: any): any;
|
||
|
||
@@ -169,3 +170,8 @@ var r17arg1 = <T>(x: (a: T) => T) => <T[]>null;
|
||
var r17 = foo17(r17arg1); // any
|
||
var r18arg1 = <T>(x: (a: T) => T) => <T[]>null;
|
||
var r18 = foo18(r18arg1);
|
||
+
|
||
+
|
||
+let der1 = new Derived();
|
||
+let der2 = new Derived2();
|
||
+let oth = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures3.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures3.ts
|
||
index 505919547f..51c890854f 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures3.ts
|
||
@@ -103,6 +103,10 @@ module Errors {
|
||
|
||
var r9arg = <T>(x: (a: T) => T) => <any[]>null;
|
||
var r9 = foo17(r9arg); // (x: { <T extends Derived >(a: T): T; <T extends Base >(a: T): T; }): any[]; (x: { <T extends Derived2>(a: T): T; <T extends Base>(a: T): T; }): any[];
|
||
+ let ba = new Base();
|
||
+ let der1 = new Derived();
|
||
+ let der2 = new Derived2();
|
||
+ let oth = new OtherDerived();
|
||
}
|
||
|
||
module WithGenericSignaturesInBaseType {
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures4.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures4.ts
|
||
index e86fc51d44..e043cec402 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithCallSignatures4.ts
|
||
@@ -108,4 +108,8 @@ var r17arg = <T>(x: (a: T) => T) => <T[]>null;
|
||
var r17 = foo17(r17arg);
|
||
|
||
var r18arg = (x: <T>(a: T) => T) => <any[]>null;
|
||
-var r18 = foo18(r18arg);
|
||
\ No newline at end of file
|
||
+var r18 = foo18(r18arg);
|
||
+
|
||
+let der =new Derived();
|
||
+let der2 = new Derived2();
|
||
+let oth = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures2.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures2.ts
|
||
index 46d1c9e91d..683db9f182 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures2.ts
|
||
@@ -169,3 +169,8 @@ var r17arg1: new <T>(x: (a: T) => T) => T[];
|
||
var r17 = foo17(r17arg1); // any
|
||
var r18arg1: new <T>(x: (a: T) => T) => T[];
|
||
var r18 = foo18(r18arg1);
|
||
+
|
||
+
|
||
+let der =new Derived();
|
||
+let der2 = new Derived2();
|
||
+let oth = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures3.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures3.ts
|
||
index 215a5d1d4d..bbaddcabfc 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures3.ts
|
||
@@ -105,6 +105,10 @@ module Errors {
|
||
|
||
var r9arg: new <T>(x: new (a: T) => T) => any[];
|
||
var r9 = foo17(r9arg); // // (x: { <T extends Derived >(a: T): T; <T extends Base >(a: T): T; }): any[]; (x: { <T extends Derived2>(a: T): T; <T extends Base>(a: T): T; }): any[];
|
||
+ let ba = new Base();
|
||
+ let der1 = new Derived();
|
||
+ let der2 = new Derived2();
|
||
+ let oth = new OtherDerived();
|
||
}
|
||
|
||
module WithGenericSignaturesInBaseType {
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures4.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures4.ts
|
||
index 830139d3fa..5d5145d29d 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures4.ts
|
||
@@ -108,4 +108,8 @@ var r17arg: new <T>(x: new (a: T) => T) => T[];
|
||
var r17 = foo17(r17arg);
|
||
|
||
var r18arg: new (x: new <T>(a: T) => T) => any[];
|
||
-var r18 = foo18(r18arg);
|
||
\ No newline at end of file
|
||
+var r18 = foo18(r18arg);
|
||
+
|
||
+let der =new Derived();
|
||
+let der2 = new Derived2();
|
||
+let oth = new OtherDerived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures5.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures5.ts
|
||
index f33820218e..f3c1c5d20d 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures5.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignatures5.ts
|
||
@@ -6,6 +6,7 @@ class Derived extends Base { bar: string; }
|
||
class Derived2 extends Derived { baz: string; }
|
||
class OtherDerived extends Base { bing: string; }
|
||
|
||
+
|
||
interface A { // T
|
||
// M's
|
||
a: new (x: number) => number[];
|
||
@@ -45,4 +46,7 @@ interface I extends B {
|
||
a12: new <T extends Array<Base>>(x: Array<Base>, y: T) => Array<Derived>; // ok, less specific parameter type
|
||
a13: new <T extends Array<Derived>>(x: Array<Base>, y: T) => T; // ok, T = Array<Derived>, satisfies constraint, contextual signature instantiation succeeds
|
||
a14: new <T, U>(x: { a: T; b: U }) => T; // ok
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let der =new Derived();
|
||
+let der2 = new Derived2();
|
||
+let oth = new OtherDerived();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithObjectMembers4.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithObjectMembers4.ts
|
||
index b50e1f7106..2c99af9515 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithObjectMembers4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithObjectMembers4.ts
|
||
@@ -30,4 +30,8 @@ class A3 {
|
||
|
||
class B3 extends A3 {
|
||
'1.1': Derived; // ok, inherits '1'
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let der = new Derived();
|
||
+let b1 = new B();
|
||
+let b2 = new B2();
|
||
+let b3 = new B3();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/undefinedIsSubtypeOfEverything.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/undefinedIsSubtypeOfEverything.ts
|
||
index 7ee0906ee2..08c7e7d192 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/undefinedIsSubtypeOfEverything.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/undefinedIsSubtypeOfEverything.ts
|
||
@@ -118,3 +118,28 @@ class D16 extends Base {
|
||
class D17 extends Base {
|
||
foo: {};
|
||
}
|
||
+
|
||
+
|
||
+let d0 = new D0();
|
||
+let da = new DA();
|
||
+let d1 = new D1()
|
||
+let d1a = new D1A()
|
||
+let d2 = new D2()
|
||
+let d2a = new D2A()
|
||
+let d3 = new D3()
|
||
+let d3a = new D1A()
|
||
+let d4 = new D4()
|
||
+let d5 = new D5()
|
||
+let d6 = new D6()
|
||
+let d7 = new D7()
|
||
+let d8 = new D8()
|
||
+let d9 = new D9()
|
||
+let d10 = new D10()
|
||
+let d11 = new D11()
|
||
+let d12 = new D12()
|
||
+let c1 = new c()
|
||
+let d13 = new D13()
|
||
+let d14 = new D14()
|
||
+let d15 = new D15()
|
||
+let d16 = new D16()
|
||
+let d17 = new D17()
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity.ts
|
||
index 225a974181..acf6300dba 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity.ts
|
||
@@ -85,4 +85,8 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I);
|
||
function foo14(x: typeof b); // error
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity2.ts
|
||
index fefde23a69..2427d26180 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity2.ts
|
||
@@ -62,4 +62,7 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+let aa = new A();
|
||
+let bb = new B();
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures.ts
|
||
index 94038f6df9..bb5d06c3fc 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures.ts
|
||
@@ -97,4 +97,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qy17 = new A();
|
||
+let qy18 = new B();
|
||
+let qy19 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures2.ts
|
||
index 699f0f73f7..99aafb4b8a 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures2.ts
|
||
@@ -97,4 +97,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let aa = new A();
|
||
+let bb = new B();
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts.ts
|
||
index b62b558d06..8a23c2c1bd 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts.ts
|
||
@@ -97,4 +97,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let aa = new A();
|
||
+let bb = new B();
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesWithOverloads.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesWithOverloads.ts
|
||
index 0aaf7c30f2..cc561aa934 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesWithOverloads.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesWithOverloads.ts
|
||
@@ -113,4 +113,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let aa = new A();
|
||
+let bb = new B();
|
||
+let cc = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures.ts
|
||
index efec6a715b..964c2a9d43 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures.ts
|
||
@@ -84,4 +84,8 @@ function foo13(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A('1');
|
||
+let b1 = new B('1');
|
||
+let c1 = new C(1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures2.ts
|
||
index 63e5167a4c..09f632da93 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures2.ts
|
||
@@ -73,4 +73,6 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qy38 = new B(null);
|
||
+let qy39 =new C(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.ts
|
||
index b8fc424b21..b6af7ec955 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.ts
|
||
@@ -73,4 +73,6 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2<string>);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qo23 =new B(null,null);
|
||
+let qo24 =new C(null,null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures.ts
|
||
index d95bc486df..72019e6b9a 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures.ts
|
||
@@ -97,4 +97,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures2.ts
|
||
index 5c009926a0..099927c132 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures2.ts
|
||
@@ -97,4 +97,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<string, number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.ts
|
||
index ede6da4040..21f9ed1933 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.ts
|
||
@@ -99,4 +99,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<String>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.ts
|
||
index 5fb315c4da..c0ce245917 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.ts
|
||
@@ -111,4 +111,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<String, String>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
+let d1 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.ts
|
||
index aaae2cbf33..b341b1f6c2 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.ts
|
||
@@ -120,4 +120,11 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<Three, Three>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let one = new One();
|
||
+let two = new Two();
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
+let d1 = new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.ts
|
||
index 97a657606e..ab7da883ec 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.ts
|
||
@@ -99,4 +99,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qy12 = new A();
|
||
+let qy13 = new B();
|
||
+let qy14 = new C();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.ts
|
||
index df7533d906..5e419a9b14 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.ts
|
||
@@ -99,4 +99,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<Date>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let qo27 = new A();
|
||
+let qo28 =new B();
|
||
+let qo29 =new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.ts
|
||
index e3bd868941..1bda87ea35 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.ts
|
||
@@ -97,4 +97,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number, B<string, string>, B<number, string>>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.ts
|
||
index 9e01aaec49..9b74d14cfc 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.ts
|
||
@@ -97,4 +97,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qo17 = new A();
|
||
+let qo18 =new B();
|
||
+let qo19 =new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams.ts
|
||
index c5454cc41e..781a351188 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams.ts
|
||
@@ -99,4 +99,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qo9 = new A();
|
||
+let qo10 = new B();
|
||
+let qo11 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.ts
|
||
index b8620f04d1..ca2a5abb87 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.ts
|
||
@@ -99,4 +99,7 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<string, number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.ts
|
||
index f39d23637a..828b26331c 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.ts
|
||
@@ -99,4 +99,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<string, number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.ts
|
||
index 974f53cb9c..8d1aa46bde 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.ts
|
||
@@ -72,3 +72,5 @@ function foo13(x: any) { }
|
||
function foo14(x: I<Number>);
|
||
function foo14(x: typeof b); // ok
|
||
function foo14(x: any) { }
|
||
+let qo15 = new B(null);
|
||
+let qo16 = new C(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.ts
|
||
index 47bab5dab8..963aabc746 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.ts
|
||
@@ -83,4 +83,9 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<Number, Number>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+var aa = []
|
||
+let b1 = new B(aa,aa);
|
||
+let c1 = new C('','');
|
||
+let d1 = new D(1,1);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.ts
|
||
index 14f4933a15..b593e623e5 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.ts
|
||
@@ -92,4 +92,9 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<Five<string>, Five<string>>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+let qo1 = new One();
|
||
+let qo2 = new Two();
|
||
+let qo3 = new B(null,null);
|
||
+let qo4 = new C(null,null);
|
||
+let qo5 = new D(null,null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.ts
|
||
index 9c072e8936..185dab627d 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.ts
|
||
@@ -79,4 +79,6 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<number>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+let qy49 =new B(null);
|
||
+let qy50 =new C(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.ts
|
||
index 2e0a98d557..9e63b81350 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.ts
|
||
@@ -75,4 +75,8 @@ function foo14(x: any) { }
|
||
|
||
function foo15(x: I2);
|
||
function foo15(x: C<Date>); // ok
|
||
-function foo15(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo15(x: any) { }
|
||
+
|
||
+var aa;
|
||
+let b1 = new B(aa);
|
||
+let c1 = new C(aa);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.ts
|
||
index fe01df2564..8caa853954 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.ts
|
||
@@ -69,4 +69,6 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<string, Date, RegExp, boolean>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+let qo6 = new B(null);
|
||
+let qo7 = new C(null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts
|
||
index 20d7dbab13..7573f3e8b4 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts
|
||
@@ -69,4 +69,8 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<string>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+
|
||
+let b1 = new B(a);
|
||
+let c1 = new C(a);
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.ts
|
||
index 56dc5a051c..2caea04bc0 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.ts
|
||
@@ -71,4 +71,7 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<string>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+let b1 = new B(a);
|
||
+let c1 = new C(a);
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.ts
|
||
index 6c4a282228..d9e2b8c184 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.ts
|
||
@@ -71,4 +71,7 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<string, number>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+let b1 = new B(a);
|
||
+let c1 = new C(a);
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.ts
|
||
index 8c9a08137f..0683e8d40b 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.ts
|
||
@@ -71,4 +71,6 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I<string, number>);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+let qy15 = new B(null,null);
|
||
+let qy16 = new C(null,null);
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers1.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers1.ts
|
||
index 867199d905..0c6b2ca24b 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers1.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers1.ts
|
||
@@ -119,3 +119,6 @@ function foo16(x: I);
|
||
function foo16(x: PB); // error
|
||
function foo16(x: any) { }
|
||
|
||
+let c1 = new C();
|
||
+let pa = new PA();
|
||
+let pb = new PB();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers2.ts
|
||
index ea9d7d04ee..bf735eb8a5 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers2.ts
|
||
@@ -122,3 +122,8 @@ function foo16(x: I);
|
||
function foo16(x: PB); // error
|
||
function foo16(x: any) { }
|
||
|
||
+
|
||
+let der = new Derived()
|
||
+let c1 = new C();
|
||
+let pa = new PA();
|
||
+let pb = new PB();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers3.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers3.ts
|
||
index d3f22604c4..337ac0b542 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers3.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers3.ts
|
||
@@ -119,3 +119,6 @@ function foo16(x: I);
|
||
function foo16(x: PB); // error
|
||
function foo16(x: any) { }
|
||
|
||
+let qo32 =new C();
|
||
+let qo30 = new PA();
|
||
+let qo31 =new PB();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithOptionality.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithOptionality.ts
|
||
index 7c24195105..21be3c5930 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithOptionality.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithOptionality.ts
|
||
@@ -53,4 +53,8 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I);
|
||
function foo14(x: typeof b); // ok
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+
|
||
+let a1 = new A();
|
||
+let b1 = new B();
|
||
+let c1 = new C();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts
|
||
index b9e390158c..fe547befb2 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts
|
||
@@ -116,4 +116,6 @@ function foo15(x: any) { }
|
||
function foo16(x: I);
|
||
function foo16(x: PB); // no error
|
||
function foo16(x: any) { }
|
||
-
|
||
+let qo26 =new C();
|
||
+let qo24 = new PA();
|
||
+let qo25 =new PB();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts
|
||
index 769e59f06d..403c1692d7 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts
|
||
@@ -35,3 +35,4 @@ function foo6(x: D<number>): string; // error
|
||
function foo6(x: any): any { }
|
||
|
||
|
||
+let d1 = new D();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPublics.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPublics.ts
|
||
index 813a8333e5..6f12d3d4e0 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPublics.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPublics.ts
|
||
@@ -85,4 +85,7 @@ function foo13(x: any) { }
|
||
|
||
function foo14(x: I);
|
||
function foo14(x: typeof b); // error
|
||
-function foo14(x: any) { }
|
||
\ No newline at end of file
|
||
+function foo14(x: any) { }
|
||
+let qy41 = new A();
|
||
+let qy42 =new B();
|
||
+let qy43 =new C();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers.ts
|
||
index f511e56bc3..e6d583aa06 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers.ts
|
||
@@ -119,3 +119,6 @@ function foo16(x: I);
|
||
function foo16(x: PB); // error
|
||
function foo16(x: any) { }
|
||
|
||
+let qo35 =new C();
|
||
+let qo33 = new PA();
|
||
+let qo34 =new PB();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers2.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers2.ts
|
||
index d8af511910..7c37adc723 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers2.ts
|
||
@@ -122,3 +122,8 @@ function foo16(x: I);
|
||
function foo16(x: PB); // error
|
||
function foo16(x: any) { }
|
||
|
||
+
|
||
+let der = new Derived();
|
||
+let c1 = new C();
|
||
+let pa = new PA();
|
||
+let pb = new PB();
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/typeParametersAreIdenticalToThemselves.ts b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/typeParametersAreIdenticalToThemselves.ts
|
||
index 0495789326..383623ee14 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/typeParametersAreIdenticalToThemselves.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/typeParametersAreIdenticalToThemselves.ts
|
||
@@ -73,4 +73,6 @@ interface I2<T extends Date> {
|
||
|
||
foo3<T>(x: T);
|
||
foo3<T>(x: T); // no error, different declaration for each T
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let qy36 = new C();
|
||
+let qy37 =new C2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithConstraintsTypeArgumentInference.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithConstraintsTypeArgumentInference.ts
|
||
index 601f790667..b8526977ef 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithConstraintsTypeArgumentInference.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithConstraintsTypeArgumentInference.ts
|
||
@@ -104,3 +104,6 @@ var r8b = i.foo5(d2, d2); // Derived2
|
||
var r9 = i.foo6(); // Derived
|
||
var r10 = i.foo7(d1); // Base
|
||
var r11 = i.foo8(); // Base
|
||
+
|
||
+let qu12 = new Derived();
|
||
+let qu13 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments4.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments4.ts
|
||
index 3d68ff7a0d..74c3573627 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments4.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments4.ts
|
||
@@ -19,4 +19,6 @@ var b: {
|
||
new<T>(x: T): any;
|
||
}
|
||
|
||
-var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {})
|
||
\ No newline at end of file
|
||
+var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {})
|
||
+let qy3 = new C();
|
||
+let qy4 =new D();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs2.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs2.ts
|
||
index 514df351cc..52f1c5e20f 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs2.ts
|
||
@@ -29,4 +29,6 @@ interface I<T, U> {
|
||
}
|
||
|
||
var i: I<Base, Derived>;
|
||
-var r4 = f2(i); // Base => Derived
|
||
\ No newline at end of file
|
||
+var r4 = f2(i); // Base => Derived
|
||
+let qy0 = new Derived();
|
||
+let qy1 = new Derived2();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints.ts
|
||
index e1c91529d7..475dfe3dcb 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints.ts
|
||
@@ -19,8 +19,8 @@ function foo<T extends { x: string }>(t: X<T>, t2: X<T>) {
|
||
return x;
|
||
}
|
||
|
||
-var c1 = new X<C>();
|
||
-var d1 = new X<D>();
|
||
+// var c1 = new X<C>();
|
||
+// var d1 = new X<D>();
|
||
var r = foo(c1, d1);
|
||
var r2 = foo(c1, c1);
|
||
|
||
@@ -30,4 +30,8 @@ function foo2<T extends C>(t: X<T>, t2: X<T>) {
|
||
}
|
||
|
||
var r = foo2(c1, d1);
|
||
-var r2 = foo2(c1, c1);
|
||
\ No newline at end of file
|
||
+var r2 = foo2(c1, c1);
|
||
+
|
||
+let qu4 = new C();
|
||
+let qu5 = new D();
|
||
+let qu6 = new X();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts
|
||
index c97915eaf1..5f7fee7daf 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts
|
||
@@ -35,3 +35,4 @@ var r5 = f3(new Derived(), x => x);
|
||
|
||
var r6 = f3(null, null); // any
|
||
var r7 = f3(null, x => x); // any
|
||
+let qu8 = new Derived();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithObjectTypeArgsAndConstraints.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithObjectTypeArgsAndConstraints.ts
|
||
index 1c29b3822b..a52b2b835e 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithObjectTypeArgsAndConstraints.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithObjectTypeArgsAndConstraints.ts
|
||
@@ -37,6 +37,8 @@ module Class {
|
||
var g2: G2<D>;
|
||
var r = g2.foo2(c1, d1);
|
||
var r2 = g2.foo2(c1, c1);
|
||
+ var gg1 = new G();
|
||
+ var gg2 = new G2();
|
||
}
|
||
|
||
module Interface {
|
||
@@ -57,4 +59,7 @@ module Interface {
|
||
var g2: G2<D>;
|
||
var r = g2.foo2(c1, d1);
|
||
var r2 = g2.foo2(c1, c1);
|
||
-}
|
||
\ No newline at end of file
|
||
+}
|
||
+let c = new C();
|
||
+let d = new D();
|
||
+let x = new X();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/keyofInferenceLowerPriorityThanReturn.ts b/tests/cases/conformance/types/typeRelationships/typeInference/keyofInferenceLowerPriorityThanReturn.ts
|
||
index 9de110bd1e..7a24403769 100644
|
||
--- a/tests/cases/conformance/types/typeRelationships/typeInference/keyofInferenceLowerPriorityThanReturn.ts
|
||
+++ b/tests/cases/conformance/types/typeRelationships/typeInference/keyofInferenceLowerPriorityThanReturn.ts
|
||
@@ -44,3 +44,7 @@ function insertOnConflictDoNothing<Req extends object, Def extends object>(_tabl
|
||
function f() {
|
||
insertOnConflictDoNothing(bookTable, ConflictTarget.tableColumns(["serial"])); // <-- No error here; should use the type inferred for the return type of `tableColumns`
|
||
}
|
||
+let qu9 = new Write();
|
||
+let qu10 = new Col();
|
||
+let qu11 =new Table();
|
||
+let qu12 =new ConflictTarget();
|
||
\ No newline at end of file
|
||
diff --git a/tests/cases/conformance/types/union/discriminatedUnionTypes3.ts b/tests/cases/conformance/types/union/discriminatedUnionTypes3.ts
|
||
new file mode 100644
|
||
index 0000000000..a5e51271bc
|
||
--- /dev/null
|
||
+++ b/tests/cases/conformance/types/union/discriminatedUnionTypes3.ts
|
||
@@ -0,0 +1,19 @@
|
||
+// @strict: true
|
||
+
|
||
+// Repro from #44435
|
||
+
|
||
+type Correct = {
|
||
+ code: string
|
||
+ property: true
|
||
+ err: undefined
|
||
+}
|
||
+type Err = {
|
||
+ err: `${string} is wrong!`
|
||
+}
|
||
+type SomeReturnType = Correct | Err;
|
||
+
|
||
+const example: SomeReturnType = {} as SomeReturnType;
|
||
+
|
||
+if (example.err === undefined) {
|
||
+ example.property; // true
|
||
+}
|
||
\ No newline at end of file
|
||
--
|
||
2.17.1
|
||
|