diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go index b709abb0f6..b1eb903d43 100644 --- a/internal/ast/utilities.go +++ b/internal/ast/utilities.go @@ -3921,3 +3921,12 @@ func HasContextSensitiveParameters(node *Node) bool { func IsInfinityOrNaNString(name string) bool { return name == "Infinity" || name == "-Infinity" || name == "NaN" } + +func GetFirstConstructorWithBody(node *Node) *Node { + for _, member := range node.Members() { + if IsConstructorDeclaration(member) && NodeIsPresent(member.Body()) { + return member + } + } + return nil +} diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 1f1cd35509..8cd1623765 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -1518,12 +1518,14 @@ func (c *Checker) onFailedToResolveSymbol(errorLocation *ast.Node, name string, suggestion := c.getSuggestedSymbolForNonexistentSymbol(errorLocation, name, meaning) if suggestion != nil && !(suggestion.ValueDeclaration != nil && ast.IsAmbientModule(suggestion.ValueDeclaration) && ast.IsGlobalScopeAugmentation(suggestion.ValueDeclaration)) { suggestionName := c.symbolToString(suggestion) - message := core.IfElse(meaning == ast.SymbolFlagsNamespace, diagnostics.Cannot_find_namespace_0_Did_you_mean_1, diagnostics.Cannot_find_name_0_Did_you_mean_1) + isUncheckedJS := c.isUncheckedJSSuggestion(errorLocation, suggestion, false /*excludeClasses*/) + message := core.IfElse(meaning == ast.SymbolFlagsNamespace, diagnostics.Cannot_find_namespace_0_Did_you_mean_1, + core.IfElse(isUncheckedJS, diagnostics.Could_not_find_name_0_Did_you_mean_1, diagnostics.Cannot_find_name_0_Did_you_mean_1)) diagnostic := NewDiagnosticForNode(errorLocation, message, name, suggestionName) if suggestion.ValueDeclaration != nil { diagnostic.AddRelatedInfo(NewDiagnosticForNode(suggestion.ValueDeclaration, diagnostics.X_0_is_declared_here, suggestionName)) } - c.diagnostics.Add(diagnostic) + c.addErrorOrSuggestion(!isUncheckedJS, diagnostic) return } // And then fall back to unspecified "not found" @@ -10873,11 +10875,10 @@ func (c *Checker) checkPropertyAccessExpressionOrQualifiedName(node *ast.Node, l if c.checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedSymbol) { return c.errorType } - // !!! - // containingClass := getContainingClassExcludingClassDecorators(right) - // if containingClass && isPlainJSFile(ast.GetSourceFileOfNode(containingClass), c.compilerOptions.checkJs) { - // c.grammarErrorOnNode(right, diagnostics.Private_field_0_must_be_declared_in_an_enclosing_class, right.Text()) - // } + containingClass := getContainingClassExcludingClassDecorators(right) + if containingClass != nil && ast.IsPlainJSFile(ast.GetSourceFileOfNode(containingClass), c.compilerOptions.CheckJs) { + c.grammarErrorOnNode(right, diagnostics.Private_field_0_must_be_declared_in_an_enclosing_class, right.Text()) + } } else { isSetonlyAccessor := prop.Flags&ast.SymbolFlagsSetAccessor != 0 && prop.Flags&ast.SymbolFlagsGetAccessor == 0 if isSetonlyAccessor && assignmentKind != AssignmentKindDefinite { @@ -10904,6 +10905,10 @@ func (c *Checker) checkPropertyAccessExpressionOrQualifiedName(node *ast.Node, l indexInfo = c.getApplicableIndexInfoForName(apparentType, right.Text()) } if indexInfo == nil { + isUncheckedJS := c.isUncheckedJSSuggestion(node, leftType.symbol, true /*excludeClasses*/) + if !isUncheckedJS && c.isJSLiteralType(leftType) { + return c.anyType + } if leftType.symbol == c.globalThisSymbol { globalSymbol := c.globalThisSymbol.Exports[right.Text()] if globalSymbol != nil && globalSymbol.Flags&ast.SymbolFlagsBlockScoped != 0 { @@ -10914,7 +10919,7 @@ func (c *Checker) checkPropertyAccessExpressionOrQualifiedName(node *ast.Node, l return c.anyType } if right.Text() != "" && !c.checkAndReportErrorForExtendingInterface(node) { - c.reportNonexistentProperty(right, core.IfElse(isThisTypeParameter(leftType), apparentType, leftType)) + c.reportNonexistentProperty(right, core.IfElse(isThisTypeParameter(leftType), apparentType, leftType), isUncheckedJS) } return c.errorType } @@ -11091,7 +11096,7 @@ func (c *Checker) checkPrivateIdentifierPropertyAccess(leftType *Type, right *as return false } -func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType *Type) { +func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType *Type, isUncheckedJS bool) { if ast.IsJSDocNameReferenceContext(propNode) { return } @@ -11123,7 +11128,8 @@ func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType * suggestion := c.getSuggestedSymbolForNonexistentProperty(propNode, containingType) if suggestion != nil { suggestedName := ast.SymbolName(suggestion) - diagnostic = NewDiagnosticChainForNode(diagnostic, propNode, diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName) + message := core.IfElse(isUncheckedJS, diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2, diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2) + diagnostic = NewDiagnosticChainForNode(diagnostic, propNode, message, missingProperty, container, suggestedName) if suggestion.ValueDeclaration != nil { diagnostic.AddRelatedInfo(NewDiagnosticForNode(suggestion.ValueDeclaration, diagnostics.X_0_is_declared_here, suggestedName)) } @@ -11140,7 +11146,7 @@ func (c *Checker) reportNonexistentProperty(propNode *ast.Node, containingType * } } } - c.diagnostics.Add(diagnostic) + c.addErrorOrSuggestion(!isUncheckedJS || diagnostic.Code() != diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.Code(), diagnostic) } func (c *Checker) getSuggestedLibForNonExistentProperty(missingProperty string, containingType *Type) string { @@ -12609,7 +12615,8 @@ func (c *Checker) checkInExpression(left *ast.Expression, right *ast.Expression, // Unlike in 'checkPrivateIdentifierExpression' we now have access to the RHS type // which provides us with the opportunity to emit more detailed errors if c.symbolNodeLinks.Get(left).resolvedSymbol == nil && ast.GetContainingClass(left) != nil { - c.reportNonexistentProperty(left, rightType) + isUncheckedJS := c.isUncheckedJSSuggestion(left, rightType.symbol, true /*excludeClasses*/) + c.reportNonexistentProperty(left, rightType, isUncheckedJS) } } else { // The type of the left operand must be assignable to string, number, or symbol. @@ -12714,6 +12721,9 @@ func (c *Checker) checkObjectLiteral(node *ast.Node, checkMode CheckMode) *Type } result := c.newAnonymousType(node.Symbol(), propertiesTable, nil, nil, indexInfos) result.objectFlags |= objectFlags | ObjectFlagsObjectLiteral | ObjectFlagsContainsObjectOrArrayLiteral + if contextualType == nil && ast.IsInJSFile(node) && !ast.IsInJsonFile(node) { + result.objectFlags |= ObjectFlagsJSLiteral + } if patternWithComputedProperties { result.objectFlags |= ObjectFlagsObjectLiteralPatternWithComputedProperties } @@ -17598,6 +17608,10 @@ func (c *Checker) widenTypeForVariableLikeDeclaration(t *Type, declaration *ast. } func (c *Checker) reportImplicitAny(declaration *ast.Node, t *Type, wideningKind WideningKind) { + if ast.IsInJSFile(declaration) && !ast.IsCheckJSEnabledForFile(ast.GetSourceFileOfNode(declaration), c.compilerOptions) { + // Only report implicit any errors/suggestions in TS and ts-check JS files + return + } typeAsString := c.TypeToString(c.getWidenedType(t)) var diagnostic *diagnostics.Message switch declaration.Kind { @@ -26321,6 +26335,9 @@ func (c *Checker) getPropertyTypeForIndexType(originalObjectType *Type, objectTy if indexType.flags&TypeFlagsNever != 0 { return c.neverType } + if c.isJSLiteralType(objectType) { + return c.anyType + } if accessExpression != nil && !isConstEnumObjectType(objectType) { if isObjectLiteralType(objectType) { if c.noImplicitAny && indexType.flags&(TypeFlagsStringLiteral|TypeFlagsNumberLiteral) != 0 { @@ -26378,6 +26395,9 @@ func (c *Checker) getPropertyTypeForIndexType(originalObjectType *Type, objectTy if accessFlags&AccessFlagsAllowMissing != 0 && isObjectLiteralType(objectType) { return c.undefinedType } + if c.isJSLiteralType(objectType) { + return c.anyType + } if accessNode != nil { indexNode := getIndexNodeForAccessExpression(accessNode) if indexNode.Kind != ast.KindBigIntLiteral && indexType.flags&(TypeFlagsStringLiteral|TypeFlagsNumberLiteral) != 0 { diff --git a/internal/checker/utilities.go b/internal/checker/utilities.go index d096b0032d..617e2f80b7 100644 --- a/internal/checker/utilities.go +++ b/internal/checker/utilities.go @@ -1825,3 +1825,92 @@ func nodeStartsNewLexicalEnvironment(node *ast.Node) bool { } return false } + +// Determines whether a did-you-mean error should be a suggestion in an unchecked JS file. +// Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck +// It does not suggest when the suggestion: +// - Is from a global file that is different from the reference file, or +// - (optionally) Is a class, or is a this.x property access expression +func (c *Checker) isUncheckedJSSuggestion(node *ast.Node, suggestion *ast.Symbol, excludeClasses bool) bool { + file := ast.GetSourceFileOfNode(node) + if file != nil { + if c.compilerOptions.CheckJs.IsUnknown() && file.CheckJsDirective == nil && (file.ScriptKind == core.ScriptKindJS || file.ScriptKind == core.ScriptKindJSX) { + var declarationFile *ast.SourceFile + if suggestion != nil { + if firstDeclaration := core.FirstOrNil(suggestion.Declarations); firstDeclaration != nil { + declarationFile = ast.GetSourceFileOfNode(firstDeclaration) + } + } + suggestionHasNoExtendsOrDecorators := suggestion == nil || + suggestion.ValueDeclaration == nil || + !ast.IsClassLike(suggestion.ValueDeclaration) || + len(ast.GetExtendsHeritageClauseElements(suggestion.ValueDeclaration)) != 0 || + classOrConstructorParameterIsDecorated(suggestion.ValueDeclaration) + return !(file != declarationFile && declarationFile != nil && ast.IsGlobalSourceFile(declarationFile.AsNode())) && + !(excludeClasses && suggestion != nil && suggestion.Flags&ast.SymbolFlagsClass != 0 && suggestionHasNoExtendsOrDecorators) && + !(node != nil && excludeClasses && ast.IsPropertyAccessExpression(node) && node.Expression().Kind == ast.KindThisKeyword && suggestionHasNoExtendsOrDecorators) + } + } + return false +} + +func classOrConstructorParameterIsDecorated(node *ast.Node) bool { + if nodeIsDecorated(node, nil, nil) { + return true + } + constructor := ast.GetFirstConstructorWithBody(node) + return constructor != nil && childIsDecorated(constructor, node) +} + +func nodeIsDecorated(node *ast.Node, parent *ast.Node, grandparent *ast.Node) bool { + return ast.HasDecorators(node) && nodeCanBeDecorated(false, node, parent, grandparent) +} + +func nodeOrChildIsDecorated(node *ast.Node, parent *ast.Node, grandparent *ast.Node) bool { + return nodeIsDecorated(node, parent, grandparent) || childIsDecorated(node, parent) +} + +func childIsDecorated(node *ast.Node, parent *ast.Node) bool { + switch node.Kind { + case ast.KindClassDeclaration, ast.KindClassExpression: + return core.Some(node.Members(), func(m *ast.Node) bool { + return nodeOrChildIsDecorated(m, node, parent) + }) + case ast.KindMethodDeclaration, + ast.KindSetAccessor, + ast.KindConstructor: + return core.Some(node.Parameters(), func(p *ast.Node) bool { + return nodeIsDecorated(p, node, parent) + }) + default: + return false + } +} + +// Returns if a type is or consists of a JSLiteral object type +// In addition to objects which are directly literals, +// * unions where every element is a jsliteral +// * intersections where at least one element is a jsliteral +// * and instantiable types constrained to a jsliteral +// Should all count as literals and not print errors on access or assignment of possibly existing properties. +// This mirrors the behavior of the index signature propagation, to which this behaves similarly (but doesn't affect assignability or inference). +func (c *Checker) isJSLiteralType(t *Type) bool { + if c.noImplicitAny { + return false + // Flag is meaningless under `noImplicitAny` mode + } + if t.objectFlags&ObjectFlagsJSLiteral != 0 { + return true + } + if t.flags&TypeFlagsUnion != 0 { + return core.Every(t.AsUnionType().types, c.isJSLiteralType) + } + if t.flags&TypeFlagsIntersection != 0 { + return core.Some(t.AsIntersectionType().types, c.isJSLiteralType) + } + if t.flags&TypeFlagsInstantiable != 0 { + constraint := c.getResolvedBaseConstraint(t, nil) + return constraint != t && c.isJSLiteralType(constraint) + } + return false +} diff --git a/internal/transformers/declarations/transform.go b/internal/transformers/declarations/transform.go index 6292aafdbd..34dcec12b3 100644 --- a/internal/transformers/declarations/transform.go +++ b/internal/transformers/declarations/transform.go @@ -1343,7 +1343,7 @@ func (tx *DeclarationTransformer) transformClassDeclaration(input *ast.ClassDecl modifiers := tx.ensureModifiers(input.AsNode()) typeParameters := tx.ensureTypeParams(input.AsNode(), input.TypeParameters) - ctor := getFirstConstructorWithBody(input.AsNode()) + ctor := ast.GetFirstConstructorWithBody(input.AsNode()) var parameterProperties []*ast.Node if ctor != nil { oldDiag := tx.state.getSymbolAccessibilityDiagnostic diff --git a/internal/transformers/declarations/util.go b/internal/transformers/declarations/util.go index dfd28f98ab..9b61579051 100644 --- a/internal/transformers/declarations/util.go +++ b/internal/transformers/declarations/util.go @@ -203,15 +203,6 @@ func shouldEmitFunctionProperties(input *ast.FunctionDeclaration) bool { return len(overloadSignatures) == 0 || overloadSignatures[len(overloadSignatures)-1] == input.AsNode() } -func getFirstConstructorWithBody(node *ast.Node) *ast.Node { - for _, member := range node.Members() { - if ast.IsConstructorDeclaration(member) && ast.NodeIsPresent(member.Body()) { - return member - } - } - return nil -} - func getEffectiveBaseTypeNode(node *ast.Node) *ast.Node { baseType := ast.GetClassExtendsHeritageElement(node) // !!! TODO: JSDoc support diff --git a/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt b/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt index 1fafa07a86..6914d14363 100644 --- a/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt @@ -1,6 +1,4 @@ ExtendedClass.js(17,5): error TS1231: An export assignment must be at the top level of a file or module declaration. -ExtendedClass.js(17,12): error TS2339: Property 'exports' does not exist on type '{}'. -ExtendedClass.js(18,19): error TS2339: Property 'exports' does not exist on type '{}'. ==== typing.d.ts (0 errors) ==== @@ -12,7 +10,7 @@ ExtendedClass.js(18,19): error TS2339: Property 'exports' does not exist on type } export = BaseClass; } -==== ExtendedClass.js (3 errors) ==== +==== ExtendedClass.js (1 errors) ==== define("lib/ExtendedClass", ["deps/BaseClass"], /** * {typeof import("deps/BaseClass")} @@ -32,9 +30,5 @@ ExtendedClass.js(18,19): error TS2339: Property 'exports' does not exist on type module.exports = ExtendedClass ~~~~~~ !!! error TS1231: An export assignment must be at the top level of a file or module declaration. - ~~~~~~~ -!!! error TS2339: Property 'exports' does not exist on type '{}'. return module.exports; - ~~~~~~~ -!!! error TS2339: Property 'exports' does not exist on type '{}'. }); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt.diff index c2a498e7f1..51c1d157e8 100644 --- a/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.errors.txt.diff @@ -3,8 +3,6 @@ @@= skipped -0, +0 lines =@@ - +ExtendedClass.js(17,5): error TS1231: An export assignment must be at the top level of a file or module declaration. -+ExtendedClass.js(17,12): error TS2339: Property 'exports' does not exist on type '{}'. -+ExtendedClass.js(18,19): error TS2339: Property 'exports' does not exist on type '{}'. + + +==== typing.d.ts (0 errors) ==== @@ -16,7 +14,7 @@ + } + export = BaseClass; + } -+==== ExtendedClass.js (3 errors) ==== ++==== ExtendedClass.js (1 errors) ==== + define("lib/ExtendedClass", ["deps/BaseClass"], + /** + * {typeof import("deps/BaseClass")} @@ -36,9 +34,5 @@ + module.exports = ExtendedClass + ~~~~~~ +!!! error TS1231: An export assignment must be at the top level of a file or module declaration. -+ ~~~~~~~ -+!!! error TS2339: Property 'exports' does not exist on type '{}'. + return module.exports; -+ ~~~~~~~ -+!!! error TS2339: Property 'exports' does not exist on type '{}'. + }); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt b/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt deleted file mode 100644 index eec29dde07..0000000000 --- a/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -index.js(3,8): error TS2339: Property 'devtools' does not exist on type '{}'. - - -==== index.js (1 errors) ==== - var chrome = {} - Object.defineProperty(chrome, 'devtools', { value: {}, enumerable: true }) - chrome.devtools.inspectedWindow = {} - ~~~~~~~~ -!!! error TS2339: Property 'devtools' does not exist on type '{}'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt.diff deleted file mode 100644 index 9ab1f70bac..0000000000 --- a/testdata/baselines/reference/submodule/compiler/jsExpandoObjectDefineProperty.errors.txt.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.jsExpandoObjectDefineProperty.errors.txt -+++ new.jsExpandoObjectDefineProperty.errors.txt -@@= skipped -0, +0 lines =@@ -- -+index.js(3,8): error TS2339: Property 'devtools' does not exist on type '{}'. -+ -+ -+==== index.js (1 errors) ==== -+ var chrome = {} -+ Object.defineProperty(chrome, 'devtools', { value: {}, enumerable: true }) -+ chrome.devtools.inspectedWindow = {} -+ ~~~~~~~~ -+!!! error TS2339: Property 'devtools' does not exist on type '{}'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt b/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt index 809cd632fe..c58053a43c 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt @@ -1,9 +1,8 @@ 0.js(6,21): error TS1003: Identifier expected. -0.js(8,9): error TS2339: Property 'SomeName' does not exist on type '{}'. 0.js(10,12): error TS2503: Cannot find namespace 'exports'. -==== 0.js (3 errors) ==== +==== 0.js (2 errors) ==== // @ts-check var exports = {}; @@ -15,8 +14,6 @@ !!! error TS1003: Identifier expected. exports.SomeName; - ~~~~~~~~ -!!! error TS2339: Property 'SomeName' does not exist on type '{}'. /** @type {exports.SomeName} */ ~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt.diff index 2b38c2bb66..d1155e5273 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocTypedefOnlySourceFile.errors.txt.diff @@ -6,11 +6,10 @@ - -==== 0.js (1 errors) ==== +0.js(6,21): error TS1003: Identifier expected. -+0.js(8,9): error TS2339: Property 'SomeName' does not exist on type '{}'. +0.js(10,12): error TS2503: Cannot find namespace 'exports'. + + -+==== 0.js (3 errors) ==== ++==== 0.js (2 errors) ==== // @ts-check var exports = {}; @@ -22,8 +21,6 @@ + +!!! error TS1003: Identifier expected. exports.SomeName; -+ ~~~~~~~~ -+!!! error TS2339: Property 'SomeName' does not exist on type '{}'. /** @type {exports.SomeName} */ - ~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt b/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt index 800958af53..1d4701cfc5 100644 --- a/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt @@ -2,10 +2,9 @@ a.js(24,13): error TS2749: 'Target' refers to a value, but is being used as a ty a.js(25,12): error TS2749: 'Second' refers to a value, but is being used as a type here. Did you mean 'typeof Second'? a.js(26,12): error TS2749: 'Fs' refers to a value, but is being used as a type here. Did you mean 'typeof Fs'? a.js(35,16): error TS2749: 'Target' refers to a value, but is being used as a type here. Did you mean 'typeof Target'? -a.js(37,16): error TS2339: Property 'UNKNOWN' does not exist on type '{ START: string; MIDDLE: string; END: string; MISTAKE: number; OK_I_GUESS: number; }'. -==== a.js (5 errors) ==== +==== a.js (4 errors) ==== /** @enum {string} */ const Target = { START: "start", @@ -51,8 +50,6 @@ a.js(37,16): error TS2339: Property 'UNKNOWN' does not exist on type '{ START: s !!! error TS2749: 'Target' refers to a value, but is being used as a type here. Did you mean 'typeof Target'? var v = Target.START v = Target.UNKNOWN // error, can't find 'UNKNOWN' - ~~~~~~~ -!!! error TS2339: Property 'UNKNOWN' does not exist on type '{ START: string; MIDDLE: string; END: string; MISTAKE: number; OK_I_GUESS: number; }'. v = Second.MISTAKE // meh..ok, I guess? v = 'something else' // allowed, like Typescript's classic enums and unlike its string enums } diff --git a/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt.diff index 4b31a93b36..3573efea65 100644 --- a/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/enumTag.errors.txt.diff @@ -3,15 +3,17 @@ @@= skipped -0, +0 lines =@@ -a.js(6,5): error TS2322: Type 'number' is not assignable to type 'string'. -a.js(12,5): error TS2322: Type 'string' is not assignable to type 'number'. +-a.js(37,16): error TS2339: Property 'UNKNOWN' does not exist on type '{ START: string; MIDDLE: string; END: string; MISTAKE: number; OK_I_GUESS: number; }'. +- +- +-==== a.js (3 errors) ==== +a.js(24,13): error TS2749: 'Target' refers to a value, but is being used as a type here. Did you mean 'typeof Target'? +a.js(25,12): error TS2749: 'Second' refers to a value, but is being used as a type here. Did you mean 'typeof Second'? +a.js(26,12): error TS2749: 'Fs' refers to a value, but is being used as a type here. Did you mean 'typeof Fs'? +a.js(35,16): error TS2749: 'Target' refers to a value, but is being used as a type here. Did you mean 'typeof Target'? - a.js(37,16): error TS2339: Property 'UNKNOWN' does not exist on type '{ START: string; MIDDLE: string; END: string; MISTAKE: number; OK_I_GUESS: number; }'. - - --==== a.js (3 errors) ==== -+==== a.js (5 errors) ==== ++ ++ ++==== a.js (4 errors) ==== /** @enum {string} */ const Target = { START: "start", @@ -31,7 +33,7 @@ OK: 1, /** @type {number} */ FINE: 2, -@@= skipped -31, +29 lines =@@ +@@= skipped -31, +28 lines =@@ } /** @param {Target} t @@ -54,4 +56,8 @@ +!!! error TS2749: 'Target' refers to a value, but is being used as a type here. Did you mean 'typeof Target'? var v = Target.START v = Target.UNKNOWN // error, can't find 'UNKNOWN' - ~~~~~~~ \ No newline at end of file +- ~~~~~~~ +-!!! error TS2339: Property 'UNKNOWN' does not exist on type '{ START: string; MIDDLE: string; END: string; MISTAKE: number; OK_I_GUESS: number; }'. + v = Second.MISTAKE // meh..ok, I guess? + v = 'something else' // allowed, like Typescript's classic enums and unlike its string enums + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt b/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt index 1a32ab8bf1..bc613fadb8 100644 --- a/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt @@ -1,13 +1,11 @@ test.js(4,5): error TS2339: Property 'config' does not exist on type 'typeof Vue'. -test.js(12,8): error TS2339: Property 'y' does not exist on type '{ x: number; }'. -test.js(14,8): error TS2339: Property 'y' does not exist on type '{ x: number; }'. ==== vue.js (0 errors) ==== export class Vue {} export const config = { x: 0 }; -==== test.js (3 errors) ==== +==== test.js (1 errors) ==== import { Vue, config } from "./vue"; // Expando declarations aren't allowed on aliases. @@ -22,10 +20,6 @@ test.js(14,8): error TS2339: Property 'y' does not exist on type '{ x: number; } // This is not an expando declaration; it works because non-strict JS allows // loosey goosey assignment on objects. config.y = {}; - ~ -!!! error TS2339: Property 'y' does not exist on type '{ x: number; }'. config.x; config.y; - ~ -!!! error TS2339: Property 'y' does not exist on type '{ x: number; }'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt.diff deleted file mode 100644 index 6567210181..0000000000 --- a/testdata/baselines/reference/submodule/conformance/expandoOnAlias.errors.txt.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.expandoOnAlias.errors.txt -+++ new.expandoOnAlias.errors.txt -@@= skipped -0, +0 lines =@@ - test.js(4,5): error TS2339: Property 'config' does not exist on type 'typeof Vue'. -+test.js(12,8): error TS2339: Property 'y' does not exist on type '{ x: number; }'. -+test.js(14,8): error TS2339: Property 'y' does not exist on type '{ x: number; }'. - - - ==== vue.js (0 errors) ==== - export class Vue {} - export const config = { x: 0 }; - --==== test.js (1 errors) ==== -+==== test.js (3 errors) ==== - import { Vue, config } from "./vue"; - - // Expando declarations aren't allowed on aliases. -@@= skipped -19, +21 lines =@@ - // This is not an expando declaration; it works because non-strict JS allows - // loosey goosey assignment on objects. - config.y = {}; -+ ~ -+!!! error TS2339: Property 'y' does not exist on type '{ x: number; }'. - config.x; - config.y; -+ ~ -+!!! error TS2339: Property 'y' does not exist on type '{ x: number; }'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt index de19b01701..a02025e400 100644 --- a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt @@ -1,14 +1,10 @@ -mod.js(2,11): error TS2339: Property 'K' does not exist on type '{}'. -use.js(3,17): error TS2339: Property 'K' does not exist on type '{}'. use.js(8,15): error TS2694: Namespace '"mod"' has no exported member 'n'. use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as a type here. Did you mean 'typeof s.Classic'? -==== mod.js (1 errors) ==== +==== mod.js (0 errors) ==== exports.n = {}; exports.n.K = function () { - ~ -!!! error TS2339: Property 'K' does not exist on type '{}'. this.x = 10; } exports.Classic = class { @@ -17,12 +13,10 @@ use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as } } -==== use.js (3 errors) ==== +==== use.js (2 errors) ==== import * as s from './mod' var k = new s.n.K() - ~ -!!! error TS2339: Property 'K' does not exist on type '{}'. k.x var classic = new s.Classic() diff --git a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt.diff index a86c615df7..c159897641 100644 --- a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces.errors.txt.diff @@ -2,17 +2,13 @@ +++ new.exportNestedNamespaces.errors.txt @@= skipped -0, +0 lines =@@ - -+mod.js(2,11): error TS2339: Property 'K' does not exist on type '{}'. -+use.js(3,17): error TS2339: Property 'K' does not exist on type '{}'. +use.js(8,15): error TS2694: Namespace '"mod"' has no exported member 'n'. +use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as a type here. Did you mean 'typeof s.Classic'? + + -+==== mod.js (1 errors) ==== ++==== mod.js (0 errors) ==== + exports.n = {}; + exports.n.K = function () { -+ ~ -+!!! error TS2339: Property 'K' does not exist on type '{}'. + this.x = 10; + } + exports.Classic = class { @@ -21,12 +17,10 @@ + } + } + -+==== use.js (3 errors) ==== ++==== use.js (2 errors) ==== + import * as s from './mod' + + var k = new s.n.K() -+ ~ -+!!! error TS2339: Property 'K' does not exist on type '{}'. + k.x + var classic = new s.Classic() + diff --git a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt index a9af2a61b9..fc1092d2a7 100644 --- a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt @@ -2,8 +2,6 @@ first.js(1,1): error TS2631: Cannot assign to '"first"' because it is a namespac first.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("first")'. second.js(1,1): error TS2631: Cannot assign to '"second"' because it is a namespace. second.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("second")'. -use.js(3,18): error TS2339: Property 'j' does not exist on type '{}'. -use.js(4,28): error TS2339: Property 'o' does not exist on type '{}'. ==== mod.js (0 errors) ==== @@ -28,13 +26,9 @@ use.js(4,28): error TS2339: Property 'o' does not exist on type '{}'. return v } -==== use.js (2 errors) ==== +==== use.js (0 errors) ==== import * as debug from './mod' debug.formatters.j - ~ -!!! error TS2339: Property 'j' does not exist on type '{}'. var one = debug.formatters.o(1) - ~ -!!! error TS2339: Property 'o' does not exist on type '{}'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt.diff index a07b25017e..d4c5b49408 100644 --- a/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/exportNestedNamespaces2.errors.txt.diff @@ -5,8 +5,6 @@ first.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("first")'. +second.js(1,1): error TS2631: Cannot assign to '"second"' because it is a namespace. second.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("second")'. -+use.js(3,18): error TS2339: Property 'j' does not exist on type '{}'. -+use.js(4,28): error TS2339: Property 'o' does not exist on type '{}'. ==== mod.js (0 errors) ==== @@ -29,18 +27,4 @@ +!!! error TS2631: Cannot assign to '"second"' because it is a namespace. exports.formatters.o = function (v) { ~~~~~~~~~~ - !!! error TS2339: Property 'formatters' does not exist on type 'typeof import("second")'. - return v - } - --==== use.js (0 errors) ==== -+==== use.js (2 errors) ==== - import * as debug from './mod' - - debug.formatters.j -+ ~ -+!!! error TS2339: Property 'j' does not exist on type '{}'. - var one = debug.formatters.o(1) -+ ~ -+!!! error TS2339: Property 'o' does not exist on type '{}'. - \ No newline at end of file + !!! error TS2339: Property 'formatters' does not exist on type 'typeof import("second")'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt b/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt index c381a8cc32..a3adfdfeb6 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt @@ -1,8 +1,7 @@ index.js(5,1): error TS2309: An export assignment cannot be used in a module with other exported elements. -index.js(12,16): error TS2339: Property 'Strings' does not exist on type '{ thing: string; also: string; desc: { item: string; }; }'. -==== index.js (2 errors) ==== +==== index.js (1 errors) ==== const Strings = { a: "A", b: "B" @@ -23,6 +22,4 @@ index.js(12,16): error TS2339: Property 'Strings' does not exist on type '{ thin ~ !!! error TS2309: An export assignment cannot be used in a module with other exported elements. module.exports.Strings = Strings; - ~~~~~~~ -!!! error TS2339: Property 'Strings' does not exist on type '{ thing: string; also: string; desc: { item: string; }; }'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt.diff index b5e42cf6f2..67f3321ba3 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsExportAssignmentExpressionPlusSecondary.errors.txt.diff @@ -3,10 +3,9 @@ @@= skipped -0, +0 lines =@@ - +index.js(5,1): error TS2309: An export assignment cannot be used in a module with other exported elements. -+index.js(12,16): error TS2339: Property 'Strings' does not exist on type '{ thing: string; also: string; desc: { item: string; }; }'. + + -+==== index.js (2 errors) ==== ++==== index.js (1 errors) ==== + const Strings = { + a: "A", + b: "B" @@ -27,6 +26,4 @@ + ~ +!!! error TS2309: An export assignment cannot be used in a module with other exported elements. + module.exports.Strings = Strings; -+ ~~~~~~~ -+!!! error TS2339: Property 'Strings' does not exist on type '{ thing: string; also: string; desc: { item: string; }; }'. + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt deleted file mode 100644 index 1b03e3deaf..0000000000 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt +++ /dev/null @@ -1,18 +0,0 @@ -index.js(5,18): error TS2339: Property 'B' does not exist on type '{}'. - - -==== index.js (1 errors) ==== - /// - - const Something = require("fs").Something; - module.exports.A = {} - module.exports.A.B = { - ~ -!!! error TS2339: Property 'B' does not exist on type '{}'. - thing: new Something() - } - -==== node_modules/@types/node/index.d.ts (0 errors) ==== - declare module "fs" { - export class Something {} - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt.diff deleted file mode 100644 index ef7b94facb..0000000000 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences3.errors.txt.diff +++ /dev/null @@ -1,22 +0,0 @@ ---- old.jsDeclarationsTypeReferences3.errors.txt -+++ new.jsDeclarationsTypeReferences3.errors.txt -@@= skipped -0, +0 lines =@@ -- -+index.js(5,18): error TS2339: Property 'B' does not exist on type '{}'. -+ -+ -+==== index.js (1 errors) ==== -+ /// -+ -+ const Something = require("fs").Something; -+ module.exports.A = {} -+ module.exports.A.B = { -+ ~ -+!!! error TS2339: Property 'B' does not exist on type '{}'. -+ thing: new Something() -+ } -+ -+==== node_modules/@types/node/index.d.ts (0 errors) ==== -+ declare module "fs" { -+ export class Something {} -+ } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt b/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt index b3f788da0c..a23b0530f1 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt @@ -1,14 +1,10 @@ -mod.js(2,18): error TS2339: Property 'K' does not exist on type '{}'. -use.js(3,17): error TS2339: Property 'K' does not exist on type '{}'. use.js(8,15): error TS2694: Namespace '"mod"' has no exported member 'n'. use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as a type here. Did you mean 'typeof s.Classic'? -==== mod.js (1 errors) ==== +==== mod.js (0 errors) ==== module.exports.n = {}; module.exports.n.K = function C() { - ~ -!!! error TS2339: Property 'K' does not exist on type '{}'. this.x = 10; } module.exports.Classic = class { @@ -17,12 +13,10 @@ use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as } } -==== use.js (3 errors) ==== +==== use.js (2 errors) ==== import * as s from './mod' var k = new s.n.K() - ~ -!!! error TS2339: Property 'K' does not exist on type '{}'. k.x var classic = new s.Classic() diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt.diff index de6a3161fb..048f3dc44a 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/moduleExportNestedNamespaces.errors.txt.diff @@ -2,17 +2,13 @@ +++ new.moduleExportNestedNamespaces.errors.txt @@= skipped -0, +0 lines =@@ - -+mod.js(2,18): error TS2339: Property 'K' does not exist on type '{}'. -+use.js(3,17): error TS2339: Property 'K' does not exist on type '{}'. +use.js(8,15): error TS2694: Namespace '"mod"' has no exported member 'n'. +use.js(9,13): error TS2749: 's.Classic' refers to a value, but is being used as a type here. Did you mean 'typeof s.Classic'? + + -+==== mod.js (1 errors) ==== ++==== mod.js (0 errors) ==== + module.exports.n = {}; + module.exports.n.K = function C() { -+ ~ -+!!! error TS2339: Property 'K' does not exist on type '{}'. + this.x = 10; + } + module.exports.Classic = class { @@ -21,12 +17,10 @@ + } + } + -+==== use.js (3 errors) ==== ++==== use.js (2 errors) ==== + import * as s from './mod' + + var k = new s.n.K() -+ ~ -+!!! error TS2339: Property 'K' does not exist on type '{}'. + k.x + var classic = new s.Classic() + diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt b/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt index 3867a2f253..3281418cb3 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt @@ -1,13 +1,10 @@ axios.js(2,1): error TS2309: An export assignment cannot be used in a module with other exported elements. -axios.js(3,16): error TS2339: Property 'default' does not exist on type '{}'. -==== axios.js (2 errors) ==== +==== axios.js (1 errors) ==== var axios = {} module.exports = axios // both assignments should be ok ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2309: An export assignment cannot be used in a module with other exported elements. module.exports.default = axios - ~~~~~~~ -!!! error TS2339: Property 'default' does not exist on type '{}'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt.diff index adfb2521e4..278fe385ef 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/moduleExportPropertyAssignmentDefault.errors.txt.diff @@ -3,15 +3,12 @@ @@= skipped -0, +0 lines =@@ - +axios.js(2,1): error TS2309: An export assignment cannot be used in a module with other exported elements. -+axios.js(3,16): error TS2339: Property 'default' does not exist on type '{}'. + + -+==== axios.js (2 errors) ==== ++==== axios.js (1 errors) ==== + var axios = {} + module.exports = axios // both assignments should be ok + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2309: An export assignment cannot be used in a module with other exported elements. + module.exports.default = axios -+ ~~~~~~~ -+!!! error TS2339: Property 'default' does not exist on type '{}'. + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt b/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt index 0048e20c35..ce34bb9964 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt @@ -1,24 +1,20 @@ -a.js(6,6): error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. mod1.js(2,1): error TS2322: Type 'string' is not assignable to type 'number'. mod1.js(3,1): error TS2309: An export assignment cannot be used in a module with other exported elements. mod1.js(8,1): error TS2322: Type 'string' is not assignable to type 'number'. -mod1.js(9,16): error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. -==== a.js (1 errors) ==== +==== a.js (0 errors) ==== /// var mod1 = require('./mod1') mod1.justExport.toFixed() mod1.bothBefore.toFixed() // error, 'toFixed' not on 'string | number' mod1.bothAfter.toFixed() // error, 'toFixed' not on 'string | number' mod1.justProperty.length - ~~~~~~~~~~~~ -!!! error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. ==== requires.d.ts (0 errors) ==== declare var module: { exports: any }; declare function require(name: string): any; -==== mod1.js (4 errors) ==== +==== mod1.js (3 errors) ==== /// module.exports.bothBefore = 'string' ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -38,6 +34,4 @@ mod1.js(9,16): error TS2339: Property 'justProperty' does not exist on type '{ j ~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. module.exports.justProperty = 'string' - ~~~~~~~~~~~~ -!!! error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt.diff index 6982a01c04..f4da044150 100644 --- a/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/moduleExportWithExportPropertyAssignment3.errors.txt.diff @@ -8,14 +8,12 @@ - - -==== a.js (2 errors) ==== -+a.js(6,6): error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. +mod1.js(2,1): error TS2322: Type 'string' is not assignable to type 'number'. +mod1.js(3,1): error TS2309: An export assignment cannot be used in a module with other exported elements. +mod1.js(8,1): error TS2322: Type 'string' is not assignable to type 'number'. -+mod1.js(9,16): error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. + + -+==== a.js (1 errors) ==== ++==== a.js (0 errors) ==== /// var mod1 = require('./mod1') mod1.justExport.toFixed() @@ -28,14 +26,12 @@ -!!! error TS2339: Property 'toFixed' does not exist on type 'number | "string"'. -!!! error TS2339: Property 'toFixed' does not exist on type '"string"'. mod1.justProperty.length -+ ~~~~~~~~~~~~ -+!!! error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. ==== requires.d.ts (0 errors) ==== declare var module: { exports: any }; declare function require(name: string): any; -==== mod1.js (0 errors) ==== -+==== mod1.js (4 errors) ==== ++==== mod1.js (3 errors) ==== /// module.exports.bothBefore = 'string' + ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -55,6 +51,4 @@ + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. module.exports.justProperty = 'string' -+ ~~~~~~~~~~~~ -+!!! error TS2339: Property 'justProperty' does not exist on type '{ justExport: number; bothBefore: number; bothAfter: number; }'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt b/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt new file mode 100644 index 0000000000..a5d01e6f55 --- /dev/null +++ b/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt @@ -0,0 +1,14 @@ +plainJSGrammarErrors4.js(5,14): error TS1111: Private field '#b' must be declared in an enclosing class. + + +==== plainJSGrammarErrors4.js (1 errors) ==== + class A { + #a; + m() { + this.#a; // ok + this.#b; // error + ~~ +!!! error TS1111: Private field '#b' must be declared in an enclosing class. + } + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt.diff deleted file mode 100644 index da2dd12cf5..0000000000 --- a/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors4.errors.txt.diff +++ /dev/null @@ -1,18 +0,0 @@ ---- old.plainJSGrammarErrors4.errors.txt -+++ new.plainJSGrammarErrors4.errors.txt -@@= skipped -0, +0 lines =@@ --plainJSGrammarErrors4.js(5,14): error TS1111: Private field '#b' must be declared in an enclosing class. -- -- --==== plainJSGrammarErrors4.js (1 errors) ==== -- class A { -- #a; -- m() { -- this.#a; // ok -- this.#b; // error -- ~~ --!!! error TS1111: Private field '#b' must be declared in an enclosing class. -- } -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt b/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt deleted file mode 100644 index 2ed5d876b6..0000000000 --- a/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -privateIdentifierExpando.js(2,3): error TS2339: Property '#bar' does not exist on type '{}'. - - -==== privateIdentifierExpando.js (1 errors) ==== - const x = {}; - x.#bar.baz = 20; - ~~~~ -!!! error TS2339: Property '#bar' does not exist on type '{}'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt.diff deleted file mode 100644 index 852316f422..0000000000 --- a/testdata/baselines/reference/submodule/conformance/privateIdentifierExpando.errors.txt.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.privateIdentifierExpando.errors.txt -+++ new.privateIdentifierExpando.errors.txt -@@= skipped -0, +0 lines =@@ -- -+privateIdentifierExpando.js(2,3): error TS2339: Property '#bar' does not exist on type '{}'. -+ -+ -+==== privateIdentifierExpando.js (1 errors) ==== -+ const x = {}; -+ x.#bar.baz = 20; -+ ~~~~ -+!!! error TS2339: Property '#bar' does not exist on type '{}'. -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt b/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt deleted file mode 100644 index bca5be8d99..0000000000 --- a/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -bug24658.js(2,6): error TS2339: Property 'expando' does not exist on type '{}'. - - -==== mod1.js (0 errors) ==== - export var hurk = {} -==== bug24658.js (1 errors) ==== - import { hurk } from './mod1' - hurk.expando = 4 - ~~~~~~~ -!!! error TS2339: Property 'expando' does not exist on type '{}'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt.diff deleted file mode 100644 index 3d5a8c325a..0000000000 --- a/testdata/baselines/reference/submodule/conformance/propertyAssignmentOnImportedSymbol.errors.txt.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- old.propertyAssignmentOnImportedSymbol.errors.txt -+++ new.propertyAssignmentOnImportedSymbol.errors.txt -@@= skipped -0, +0 lines =@@ -- -+bug24658.js(2,6): error TS2339: Property 'expando' does not exist on type '{}'. -+ -+ -+==== mod1.js (0 errors) ==== -+ export var hurk = {} -+==== bug24658.js (1 errors) ==== -+ import { hurk } from './mod1' -+ hurk.expando = 4 -+ ~~~~~~~ -+!!! error TS2339: Property 'expando' does not exist on type '{}'. -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt deleted file mode 100644 index 552d29dbc2..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt +++ /dev/null @@ -1,24 +0,0 @@ -module.js(7,17): error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -module.js(9,17): error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. - - -==== module.js (2 errors) ==== - var Inner = function() {} - Inner.prototype = { - m() { }, - i: 1 - } - // incremental assignments still work - Inner.prototype.j = 2 - ~ -!!! error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. - /** @type {string} */ - Inner.prototype.k; - ~ -!!! error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. - var inner = new Inner() - inner.m() - inner.i - inner.j - inner.k - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt.diff deleted file mode 100644 index 98eab4d8a6..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment11.errors.txt.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.typeFromPropertyAssignment11.errors.txt -+++ new.typeFromPropertyAssignment11.errors.txt -@@= skipped -0, +0 lines =@@ -- -+module.js(7,17): error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -+module.js(9,17): error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. -+ -+ -+==== module.js (2 errors) ==== -+ var Inner = function() {} -+ Inner.prototype = { -+ m() { }, -+ i: 1 -+ } -+ // incremental assignments still work -+ Inner.prototype.j = 2 -+ ~ -+!!! error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -+ /** @type {string} */ -+ Inner.prototype.k; -+ ~ -+!!! error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. -+ var inner = new Inner() -+ inner.m() -+ inner.i -+ inner.j -+ inner.k -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt deleted file mode 100644 index 8546f2ec1e..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt +++ /dev/null @@ -1,25 +0,0 @@ -module.js(8,23): error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -module.js(10,23): error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. - - -==== module.js (2 errors) ==== - var Outer = {} - Outer.Inner = function() {} - Outer.Inner.prototype = { - m() { }, - i: 1 - } - // incremental assignments still work - Outer.Inner.prototype.j = 2 - ~ -!!! error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. - /** @type {string} */ - Outer.Inner.prototype.k; - ~ -!!! error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. - var inner = new Outer.Inner() - inner.m() - inner.i - inner.j - inner.k - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt.diff deleted file mode 100644 index f820631829..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment13.errors.txt.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- old.typeFromPropertyAssignment13.errors.txt -+++ new.typeFromPropertyAssignment13.errors.txt -@@= skipped -0, +0 lines =@@ -- -+module.js(8,23): error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -+module.js(10,23): error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. -+ -+ -+==== module.js (2 errors) ==== -+ var Outer = {} -+ Outer.Inner = function() {} -+ Outer.Inner.prototype = { -+ m() { }, -+ i: 1 -+ } -+ // incremental assignments still work -+ Outer.Inner.prototype.j = 2 -+ ~ -+!!! error TS2339: Property 'j' does not exist on type '{ m(): void; i: number; }'. -+ /** @type {string} */ -+ Outer.Inner.prototype.k; -+ ~ -+!!! error TS2339: Property 'k' does not exist on type '{ m(): void; i: number; }'. -+ var inner = new Outer.Inner() -+ inner.m() -+ inner.i -+ inner.j -+ inner.k -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt index aa43d4abec..3b3f52bd05 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt @@ -1,24 +1,17 @@ use.js(1,12): error TS2503: Cannot find namespace 'Outer'. -use.js(5,22): error TS2339: Property 'Inner' does not exist on type '{}'. -work.js(1,7): error TS2339: Property 'Inner' does not exist on type '{}'. -work.js(2,7): error TS2339: Property 'Inner' does not exist on type '{}'. ==== def.js (0 errors) ==== var Outer = {}; -==== work.js (2 errors) ==== +==== work.js (0 errors) ==== Outer.Inner = function () {} - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. Outer.Inner.prototype = { - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. x: 1, m() { } } -==== use.js (2 errors) ==== +==== use.js (1 errors) ==== /** @type {Outer.Inner} */ ~~~~~ !!! error TS2503: Cannot find namespace 'Outer'. @@ -26,8 +19,6 @@ work.js(2,7): error TS2339: Property 'Inner' does not exist on type '{}'. inner.x inner.m() var inno = new Outer.Inner() - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. inno.x inno.m() diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt.diff index 3cf1ad4cce..639090bbd4 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment14.errors.txt.diff @@ -3,26 +3,19 @@ @@= skipped -0, +0 lines =@@ - +use.js(1,12): error TS2503: Cannot find namespace 'Outer'. -+use.js(5,22): error TS2339: Property 'Inner' does not exist on type '{}'. -+work.js(1,7): error TS2339: Property 'Inner' does not exist on type '{}'. -+work.js(2,7): error TS2339: Property 'Inner' does not exist on type '{}'. + + +==== def.js (0 errors) ==== + var Outer = {}; + -+==== work.js (2 errors) ==== ++==== work.js (0 errors) ==== + Outer.Inner = function () {} -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + Outer.Inner.prototype = { -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + x: 1, + m() { } + } + -+==== use.js (2 errors) ==== ++==== use.js (1 errors) ==== + /** @type {Outer.Inner} */ + ~~~~~ +!!! error TS2503: Cannot find namespace 'Outer'. @@ -30,8 +23,6 @@ + inner.x + inner.m() + var inno = new Outer.Inner() -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + inno.x + inno.m() + diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt deleted file mode 100644 index 6aa3c8b8c4..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -a.js(4,10): error TS2339: Property 'p' does not exist on type '{ q: number; }'. -a.js(7,10): error TS2339: Property 'p' does not exist on type '{ q: number; }'. -a.js(9,12): error TS2339: Property 'p' does not exist on type '{ q: number; }'. - - -==== a.js (3 errors) ==== - var GLOBSTAR = m.GLOBSTAR = {} - function m() { - } - GLOBSTAR.p = 1 - ~ -!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. - m.GLOBSTAR.q = 2 - - GLOBSTAR.p - ~ -!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. - GLOBSTAR.q - m.GLOBSTAR.p - ~ -!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. - m.GLOBSTAR.q - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt.diff deleted file mode 100644 index c31d604472..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment18.errors.txt.diff +++ /dev/null @@ -1,27 +0,0 @@ ---- old.typeFromPropertyAssignment18.errors.txt -+++ new.typeFromPropertyAssignment18.errors.txt -@@= skipped -0, +0 lines =@@ -- -+a.js(4,10): error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+a.js(7,10): error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+a.js(9,12): error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+ -+ -+==== a.js (3 errors) ==== -+ var GLOBSTAR = m.GLOBSTAR = {} -+ function m() { -+ } -+ GLOBSTAR.p = 1 -+ ~ -+!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+ m.GLOBSTAR.q = 2 -+ -+ GLOBSTAR.p -+ ~ -+!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+ GLOBSTAR.q -+ m.GLOBSTAR.p -+ ~ -+!!! error TS2339: Property 'p' does not exist on type '{ q: number; }'. -+ m.GLOBSTAR.q -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt deleted file mode 100644 index 28af6754c5..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt +++ /dev/null @@ -1,16 +0,0 @@ -file2.js(1,12): error TS2339: Property 'a' does not exist on type '{}'. -file2.js(2,12): error TS2339: Property 'b' does not exist on type '{}'. - - -==== file1.js (0 errors) ==== - var N = {}; - N.commands = {}; - -==== file2.js (2 errors) ==== - N.commands.a = 111; - ~ -!!! error TS2339: Property 'a' does not exist on type '{}'. - N.commands.b = function () { }; - ~ -!!! error TS2339: Property 'b' does not exist on type '{}'. - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt.diff deleted file mode 100644 index f488e37506..0000000000 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment34.errors.txt.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.typeFromPropertyAssignment34.errors.txt -+++ new.typeFromPropertyAssignment34.errors.txt -@@= skipped -0, +0 lines =@@ -- -+file2.js(1,12): error TS2339: Property 'a' does not exist on type '{}'. -+file2.js(2,12): error TS2339: Property 'b' does not exist on type '{}'. -+ -+ -+==== file1.js (0 errors) ==== -+ var N = {}; -+ N.commands = {}; -+ -+==== file2.js (2 errors) ==== -+ N.commands.a = 111; -+ ~ -+!!! error TS2339: Property 'a' does not exist on type '{}'. -+ N.commands.b = function () { }; -+ ~ -+!!! error TS2339: Property 'b' does not exist on type '{}'. -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt index 5b0afce0fd..54dae7d839 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt @@ -1,36 +1,24 @@ bug26877.js(1,13): error TS2503: Cannot find namespace 'Emu'. -bug26877.js(4,23): error TS2339: Property 'D' does not exist on type '{}'. -bug26877.js(5,19): error TS2339: Property 'D' does not exist on type '{}'. -bug26877.js(7,5): error TS2339: Property 'D' does not exist on type '{}'. -second.js(3,5): error TS2339: Property 'D' does not exist on type '{}'. -==== bug26877.js (4 errors) ==== +==== bug26877.js (1 errors) ==== /** @param {Emu.D} x */ ~~~ !!! error TS2503: Cannot find namespace 'Emu'. function ollKorrect(x) { x._model const y = new Emu.D() - ~ -!!! error TS2339: Property 'D' does not exist on type '{}'. const z = Emu.D._wrapperInstance; - ~ -!!! error TS2339: Property 'D' does not exist on type '{}'. } Emu.D = class { - ~ -!!! error TS2339: Property 'D' does not exist on type '{}'. constructor() { this._model = 1 } } -==== second.js (1 errors) ==== +==== second.js (0 errors) ==== var Emu = {} /** @type {string} */ Emu.D._wrapperInstance; - ~ -!!! error TS2339: Property 'D' does not exist on type '{}'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt.diff index 1f444bc551..4ced6a0b32 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment35.errors.txt.diff @@ -3,38 +3,26 @@ @@= skipped -0, +0 lines =@@ - +bug26877.js(1,13): error TS2503: Cannot find namespace 'Emu'. -+bug26877.js(4,23): error TS2339: Property 'D' does not exist on type '{}'. -+bug26877.js(5,19): error TS2339: Property 'D' does not exist on type '{}'. -+bug26877.js(7,5): error TS2339: Property 'D' does not exist on type '{}'. -+second.js(3,5): error TS2339: Property 'D' does not exist on type '{}'. + + -+==== bug26877.js (4 errors) ==== ++==== bug26877.js (1 errors) ==== + /** @param {Emu.D} x */ + ~~~ +!!! error TS2503: Cannot find namespace 'Emu'. + function ollKorrect(x) { + x._model + const y = new Emu.D() -+ ~ -+!!! error TS2339: Property 'D' does not exist on type '{}'. + const z = Emu.D._wrapperInstance; -+ ~ -+!!! error TS2339: Property 'D' does not exist on type '{}'. + } + Emu.D = class { -+ ~ -+!!! error TS2339: Property 'D' does not exist on type '{}'. + constructor() { + this._model = 1 + } + } + -+==== second.js (1 errors) ==== ++==== second.js (0 errors) ==== + var Emu = {} + /** @type {string} */ + Emu.D._wrapperInstance; -+ ~ -+!!! error TS2339: Property 'D' does not exist on type '{}'. + + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt index a8a549a4f4..db8ede3fef 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt @@ -1,6 +1,5 @@ mod.js(1,14): error TS2304: Cannot find name 'exports'. mod.js(1,24): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -mod.js(3,10): error TS2339: Property 'existy' does not exist on type '{}'. use.js(1,22): error TS2306: File 'mod.js' is not a module. @@ -13,7 +12,7 @@ use.js(1,22): error TS2306: File 'mod.js' is not a module. } util.existy // no error -==== mod.js (3 errors) ==== +==== mod.js (2 errors) ==== const util = exports = module.exports = {} ~~~~~~~ !!! error TS2304: Cannot find name 'exports'. @@ -21,7 +20,5 @@ use.js(1,22): error TS2306: File 'mod.js' is not a module. !!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. if (!!false) { util.existy = function () { } - ~~~~~~ -!!! error TS2339: Property 'existy' does not exist on type '{}'. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt.diff index 500a5ce5d3..4c08740d66 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment37.errors.txt.diff @@ -4,7 +4,6 @@ - +mod.js(1,14): error TS2304: Cannot find name 'exports'. +mod.js(1,24): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. -+mod.js(3,10): error TS2339: Property 'existy' does not exist on type '{}'. +use.js(1,22): error TS2306: File 'mod.js' is not a module. + + @@ -17,7 +16,7 @@ + } + util.existy // no error + -+==== mod.js (3 errors) ==== ++==== mod.js (2 errors) ==== + const util = exports = module.exports = {} + ~~~~~~~ +!!! error TS2304: Cannot find name 'exports'. @@ -25,7 +24,5 @@ +!!! error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. + if (!!false) { + util.existy = function () { } -+ ~~~~~~ -+!!! error TS2339: Property 'existy' does not exist on type '{}'. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt index 1b87c06947..7e5959accc 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt @@ -1,17 +1,12 @@ -a.js(1,7): error TS2339: Property 'Inner' does not exist on type '{}'. a.js(8,12): error TS2503: Cannot find namespace 'Outer'. -a.js(11,23): error TS2339: Property 'Inner' does not exist on type '{}'. b.js(1,12): error TS2503: Cannot find namespace 'Outer'. -b.js(4,19): error TS2339: Property 'Inner' does not exist on type '{}'. ==== def.js (0 errors) ==== var Outer = {}; -==== a.js (3 errors) ==== +==== a.js (1 errors) ==== Outer.Inner = class { - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. constructor() { /** @type {number} */ this.y = 12 @@ -24,18 +19,14 @@ b.js(4,19): error TS2339: Property 'Inner' does not exist on type '{}'. var local local.y var inner = new Outer.Inner() - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. inner.y -==== b.js (2 errors) ==== +==== b.js (1 errors) ==== /** @type {Outer.Inner} */ ~~~~~ !!! error TS2503: Cannot find namespace 'Outer'. var x x.y var z = new Outer.Inner() - ~~~~~ -!!! error TS2339: Property 'Inner' does not exist on type '{}'. z.y \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt.diff index f71a2bea68..48e21edf3f 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignment4.errors.txt.diff @@ -2,20 +2,15 @@ +++ new.typeFromPropertyAssignment4.errors.txt @@= skipped -0, +0 lines =@@ - -+a.js(1,7): error TS2339: Property 'Inner' does not exist on type '{}'. +a.js(8,12): error TS2503: Cannot find namespace 'Outer'. -+a.js(11,23): error TS2339: Property 'Inner' does not exist on type '{}'. +b.js(1,12): error TS2503: Cannot find namespace 'Outer'. -+b.js(4,19): error TS2339: Property 'Inner' does not exist on type '{}'. + + +==== def.js (0 errors) ==== + var Outer = {}; + -+==== a.js (3 errors) ==== ++==== a.js (1 errors) ==== + Outer.Inner = class { -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + constructor() { + /** @type {number} */ + this.y = 12 @@ -28,18 +23,14 @@ + var local + local.y + var inner = new Outer.Inner() -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + inner.y + -+==== b.js (2 errors) ==== ++==== b.js (1 errors) ==== + /** @type {Outer.Inner} */ + ~~~~~ +!!! error TS2503: Cannot find namespace 'Outer'. + var x + x.y + var z = new Outer.Inner() -+ ~~~~~ -+!!! error TS2339: Property 'Inner' does not exist on type '{}'. + z.y + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt index c10ea07ed6..38675aa916 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt @@ -1,26 +1,11 @@ -index.js(1,7): error TS2339: Property 'Item' does not exist on type '{}'. -index.js(2,8): error TS2339: Property 'Object' does not exist on type '{}'. -index.js(2,37): error TS2339: Property 'Item' does not exist on type '{}'. -index.js(4,11): error TS2339: Property 'Object' does not exist on type '{}'. -index.js(4,41): error TS2339: Property 'Object' does not exist on type '{}'. index.js(6,12): error TS2503: Cannot find namespace 'Workspace'. -==== index.js (6 errors) ==== +==== index.js (1 errors) ==== First.Item = class I {} - ~~~~ -!!! error TS2339: Property 'Item' does not exist on type '{}'. Common.Object = class extends First.Item {} - ~~~~~~ -!!! error TS2339: Property 'Object' does not exist on type '{}'. - ~~~~ -!!! error TS2339: Property 'Item' does not exist on type '{}'. Workspace.Object = class extends Common.Object {} - ~~~~~~ -!!! error TS2339: Property 'Object' does not exist on type '{}'. - ~~~~~~ -!!! error TS2339: Property 'Object' does not exist on type '{}'. /** @type {Workspace.Object} */ ~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt.diff index 5dfed1d5ae..0f10dc8383 100644 --- a/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typeFromPropertyAssignmentOutOfOrder.errors.txt.diff @@ -2,29 +2,14 @@ +++ new.typeFromPropertyAssignmentOutOfOrder.errors.txt @@= skipped -0, +0 lines =@@ - -+index.js(1,7): error TS2339: Property 'Item' does not exist on type '{}'. -+index.js(2,8): error TS2339: Property 'Object' does not exist on type '{}'. -+index.js(2,37): error TS2339: Property 'Item' does not exist on type '{}'. -+index.js(4,11): error TS2339: Property 'Object' does not exist on type '{}'. -+index.js(4,41): error TS2339: Property 'Object' does not exist on type '{}'. +index.js(6,12): error TS2503: Cannot find namespace 'Workspace'. + + -+==== index.js (6 errors) ==== ++==== index.js (1 errors) ==== + First.Item = class I {} -+ ~~~~ -+!!! error TS2339: Property 'Item' does not exist on type '{}'. + Common.Object = class extends First.Item {} -+ ~~~~~~ -+!!! error TS2339: Property 'Object' does not exist on type '{}'. -+ ~~~~ -+!!! error TS2339: Property 'Item' does not exist on type '{}'. + + Workspace.Object = class extends Common.Object {} -+ ~~~~~~ -+!!! error TS2339: Property 'Object' does not exist on type '{}'. -+ ~~~~~~ -+!!! error TS2339: Property 'Object' does not exist on type '{}'. + + /** @type {Workspace.Object} */ + ~~~~~~~~~ diff --git a/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt b/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt index ba8528abbb..88c64603d4 100644 --- a/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt @@ -2,8 +2,8 @@ mod1.js(7,9): error TS2339: Property 'Bar' does not exist on type 'typeof import mod1.js(10,1): error TS2300: Duplicate identifier 'export='. mod1.js(10,1): error TS2309: An export assignment cannot be used in a module with other exported elements. mod1.js(20,9): error TS2339: Property 'Quid' does not exist on type 'typeof import("mod1")'. +mod1.js(23,1): error TS2741: Property 'Baz' is missing in type '{ Quack: number; }' but required in type '{ Baz: typeof Baz; }'. mod1.js(23,1): error TS2300: Duplicate identifier 'export='. -mod1.js(24,5): error TS2353: Object literal may only specify known properties, and 'Quack' does not exist in type '{ Baz: typeof Baz; }'. use.js(2,32): error TS2694: Namespace '"mod1".export=' has no exported member 'Baz'. use.js(4,12): error TS2503: Cannot find namespace 'mod'. @@ -56,11 +56,12 @@ use.js(4,12): error TS2503: Cannot find namespace 'mod'. /** @typedef {number} Quack */ module.exports = { + ~~~~~~~~~~~~~~ +!!! error TS2741: Property 'Baz' is missing in type '{ Quack: number; }' but required in type '{ Baz: typeof Baz; }'. +!!! related TS2728 mod1.js:11:5: 'Baz' is declared here. ~~~~~~~~~~~~~~~~~~ Quack: 2 ~~~~~~~~~~~~ - ~~~~~ -!!! error TS2353: Object literal may only specify known properties, and 'Quack' does not exist in type '{ Baz: typeof Baz; }'. } ~ !!! error TS2300: Duplicate identifier 'export='. diff --git a/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt.diff index 1fca153ea0..42d0aaf0bd 100644 --- a/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/typedefCrossModule2.errors.txt.diff @@ -12,8 +12,8 @@ +mod1.js(10,1): error TS2300: Duplicate identifier 'export='. +mod1.js(10,1): error TS2309: An export assignment cannot be used in a module with other exported elements. +mod1.js(20,9): error TS2339: Property 'Quid' does not exist on type 'typeof import("mod1")'. ++mod1.js(23,1): error TS2741: Property 'Baz' is missing in type '{ Quack: number; }' but required in type '{ Baz: typeof Baz; }'. +mod1.js(23,1): error TS2300: Duplicate identifier 'export='. -+mod1.js(24,5): error TS2353: Object literal may only specify known properties, and 'Quack' does not exist in type '{ Baz: typeof Baz; }'. +use.js(2,32): error TS2694: Namespace '"mod1".export=' has no exported member 'Baz'. +use.js(4,12): error TS2503: Cannot find namespace 'mod'. + @@ -76,11 +76,12 @@ /** @typedef {number} Quack */ module.exports = { ++ ~~~~~~~~~~~~~~ ++!!! error TS2741: Property 'Baz' is missing in type '{ Quack: number; }' but required in type '{ Baz: typeof Baz; }'. ++!!! related TS2728 mod1.js:11:5: 'Baz' is declared here. + ~~~~~~~~~~~~~~~~~~ Quack: 2 + ~~~~~~~~~~~~ -+ ~~~~~ -+!!! error TS2353: Object literal may only specify known properties, and 'Quack' does not exist in type '{ Baz: typeof Baz; }'. } + ~ +!!! error TS2300: Duplicate identifier 'export='.