diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9a71a6a0277e8..91cafa70cf6eb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -25183,11 +25183,13 @@ namespace ts { return links.jsxNamespace; } if (!links || links.jsxNamespace !== false) { - const namespaceName = getJsxNamespace(location); - let resolvedNamespace = resolveName(location, namespaceName, SymbolFlags.Namespace, /*diagnosticMessage*/ undefined, namespaceName, /*isUse*/ false); + let resolvedNamespace = getJsxNamespaceContainerForImplicitImport(location); + if (!resolvedNamespace || resolvedNamespace === unknownSymbol) { - resolvedNamespace = getJsxNamespaceContainerForImplicitImport(location); + const namespaceName = getJsxNamespace(location); + resolvedNamespace = resolveName(location, namespaceName, SymbolFlags.Namespace, /*diagnosticMessage*/ undefined, namespaceName, /*isUse*/ false); } + if (resolvedNamespace) { const candidate = resolveSymbol(getSymbol(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, SymbolFlags.Namespace)); if (candidate && candidate !== unknownSymbol) { diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.errors.txt b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.errors.txt deleted file mode 100644 index 9cbe47a9ee62c..0000000000000 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.errors.txt +++ /dev/null @@ -1,70 +0,0 @@ -/index.tsx(1,32): error TS2322: Type '{ css: string; }' is not assignable to type '{}'. - Property 'css' does not exist on type '{}'. - - -==== /node_modules/react/index.d.ts (0 errors) ==== - export = React; - export as namespace React; - - declare namespace React {} - - declare global { - namespace JSX { - interface Element {} - interface ElementClass {} - interface ElementAttributesProperty {} - interface ElementChildrenAttribute {} - type LibraryManagedAttributes = {} - interface IntrinsicAttributes {} - interface IntrinsicClassAttributes {} - interface IntrinsicElements { - div: {} - } - } - } -==== /node_modules/@emotion/react/jsx-runtime/index.d.ts (0 errors) ==== - export { EmotionJSX as JSX } from './jsx-namespace' - -==== /node_modules/@emotion/react/jsx-runtime/jsx-namespace.d.ts (0 errors) ==== - import 'react' - - type WithConditionalCSSProp

= 'className' extends keyof P - ? (P extends { className?: string } ? P & { css?: string } : P) - : P - - type ReactJSXElement = JSX.Element - type ReactJSXElementClass = JSX.ElementClass - type ReactJSXElementAttributesProperty = JSX.ElementAttributesProperty - type ReactJSXElementChildrenAttribute = JSX.ElementChildrenAttribute - type ReactJSXLibraryManagedAttributes = JSX.LibraryManagedAttributes - type ReactJSXIntrinsicAttributes = JSX.IntrinsicAttributes - type ReactJSXIntrinsicClassAttributes = JSX.IntrinsicClassAttributes - type ReactJSXIntrinsicElements = JSX.IntrinsicElements - - export namespace EmotionJSX { - interface Element extends ReactJSXElement {} - interface ElementClass extends ReactJSXElementClass {} - interface ElementAttributesProperty - extends ReactJSXElementAttributesProperty {} - interface ElementChildrenAttribute extends ReactJSXElementChildrenAttribute {} - - type LibraryManagedAttributes = WithConditionalCSSProp

& - ReactJSXLibraryManagedAttributes - - interface IntrinsicAttributes extends ReactJSXIntrinsicAttributes {} - interface IntrinsicClassAttributes - extends ReactJSXIntrinsicClassAttributes {} - - type IntrinsicElements = { - [K in keyof ReactJSXIntrinsicElements]: ReactJSXIntrinsicElements[K] & { - css?: string - } - } - } - -==== /index.tsx (1 errors) ==== - export const Comp = () =>

; - ~~~ -!!! error TS2322: Type '{ css: string; }' is not assignable to type '{}'. -!!! error TS2322: Property 'css' does not exist on type '{}'. - \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.symbols b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.symbols index 8d16fd5c00e91..b7fff94cf86e6 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.symbols +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.symbols @@ -178,7 +178,7 @@ export namespace EmotionJSX { === /index.tsx === export const Comp = () =>
; >Comp : Symbol(Comp, Decl(index.tsx, 0, 12)) ->div : Symbol(JSX.IntrinsicElements.div, Decl(index.d.ts, 14, 33)) +>div : Symbol(div, Decl(index.d.ts, 14, 33)) >css : Symbol(css, Decl(index.tsx, 0, 30)) ->div : Symbol(JSX.IntrinsicElements.div, Decl(index.d.ts, 14, 33)) +>div : Symbol(div, Decl(index.d.ts, 14, 33)) diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.types b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.types index 908570a3e5f76..1bfeba07c4f7e 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.types +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromConfigPickedOverGlobalOne.types @@ -3,7 +3,7 @@ export = React; >React : any export as namespace React; ->React : any +>React : error declare namespace React {} @@ -103,9 +103,9 @@ export namespace EmotionJSX { === /index.tsx === export const Comp = () =>
; ->Comp : () => JSX.Element ->() =>
: () => JSX.Element ->
: JSX.Element +>Comp : () => import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element +>() =>
: () => import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element +>
: import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element >div : any >css : string >div : any diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.errors.txt b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.errors.txt index e02782e3adcf6..f62b476f13c7c 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.errors.txt +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.errors.txt @@ -1,6 +1,4 @@ /index.tsx(2,28): error TS2708: Cannot use namespace 'React' as a value. -/index.tsx(2,32): error TS2322: Type '{ css: string; }' is not assignable to type '{}'. - Property 'css' does not exist on type '{}'. ==== /node_modules/react/index.d.ts (0 errors) ==== @@ -63,12 +61,9 @@ } } -==== /index.tsx (2 errors) ==== +==== /index.tsx (1 errors) ==== /* @jsxImportSource @emotion/react */ export const Comp = () =>
; ~~~ !!! error TS2708: Cannot use namespace 'React' as a value. - ~~~ -!!! error TS2322: Type '{ css: string; }' is not assignable to type '{}'. -!!! error TS2322: Property 'css' does not exist on type '{}'. \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.symbols b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.symbols index 1387dc529c043..95969edc9f3df 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.symbols +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.symbols @@ -179,7 +179,7 @@ export namespace EmotionJSX { /* @jsxImportSource @emotion/react */ export const Comp = () =>
; >Comp : Symbol(Comp, Decl(index.tsx, 1, 12)) ->div : Symbol(JSX.IntrinsicElements.div, Decl(index.d.ts, 14, 37)) +>div : Symbol(div, Decl(index.d.ts, 14, 37)) >css : Symbol(css, Decl(index.tsx, 1, 30)) ->div : Symbol(JSX.IntrinsicElements.div, Decl(index.d.ts, 14, 37)) +>div : Symbol(div, Decl(index.d.ts, 14, 37)) diff --git a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.types b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.types index e2ce6be04faa7..c7e2aeb868276 100644 --- a/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.types +++ b/tests/baselines/reference/jsxNamespaceImplicitImportJSXNamespaceFromPragmaPickedOverGlobalOne.types @@ -104,9 +104,9 @@ export namespace EmotionJSX { === /index.tsx === /* @jsxImportSource @emotion/react */ export const Comp = () =>
; ->Comp : () => JSX.Element ->() =>
: () => JSX.Element ->
: JSX.Element +>Comp : () => import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element +>() =>
: () => import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element +>
: import("/node_modules/@emotion/react/jsx-runtime/jsx-namespace").EmotionJSX.Element >div : any >css : string >div : any