From 20b246c83a1b084529e0b6a08356505b3cf7668c Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Sat, 16 Nov 2019 04:13:51 -0500 Subject: [PATCH] Fix `getIntrinsicAttributesTypeFromJsxOpeningLikeElement` Use `getIndexTypeOfType`+`getDeclaredTypeOfSymbol` instead of `getIndexInfoOfSymbol`. Fixes #34730. --- src/compiler/checker.ts | 3 ++- .../reference/jsxIntrinsicElementsExtendsRecord.js | 10 ++++++++++ .../jsxIntrinsicElementsExtendsRecord.symbols | 12 ++++++++++++ .../jsxIntrinsicElementsExtendsRecord.types | 9 +++++++++ .../compiler/jsxIntrinsicElementsExtendsRecord.tsx | 8 ++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.js create mode 100644 tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.symbols create mode 100644 tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.types create mode 100644 tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cb64a3c5cf..e3f4644b0b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22563,7 +22563,8 @@ namespace ts { return links.resolvedJsxElementAttributesType = getTypeOfSymbol(symbol); } else if (links.jsxFlags & JsxFlags.IntrinsicIndexedElement) { - return links.resolvedJsxElementAttributesType = getIndexInfoOfSymbol(symbol, IndexKind.String)!.type; + return links.resolvedJsxElementAttributesType = + getIndexTypeOfType(getDeclaredTypeOfSymbol(symbol), IndexKind.String)!; } else { return links.resolvedJsxElementAttributesType = errorType; diff --git a/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.js b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.js new file mode 100644 index 0000000000..212897a20b --- /dev/null +++ b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.js @@ -0,0 +1,10 @@ +//// [index.tsx] +declare namespace JSX { + interface IntrinsicElements extends Record {} +} + +; + + +//// [index.jsx] +; diff --git a/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.symbols b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.symbols new file mode 100644 index 0000000000..00c6f9fe7d --- /dev/null +++ b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/index.tsx === +declare namespace JSX { +>JSX : Symbol(JSX, Decl(index.tsx, 0, 0)) + + interface IntrinsicElements extends Record {} +>IntrinsicElements : Symbol(IntrinsicElements, Decl(index.tsx, 0, 23)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +} + +; +>a : Symbol(JSX.IntrinsicElements, Decl(index.tsx, 0, 23)) + diff --git a/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.types b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.types new file mode 100644 index 0000000000..a4f4476080 --- /dev/null +++ b/tests/baselines/reference/jsxIntrinsicElementsExtendsRecord.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/index.tsx === +declare namespace JSX { + interface IntrinsicElements extends Record {} +} + +; +> : error +>a : any + diff --git a/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx b/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx new file mode 100644 index 0000000000..ee78e24976 --- /dev/null +++ b/tests/cases/compiler/jsxIntrinsicElementsExtendsRecord.tsx @@ -0,0 +1,8 @@ +// @jsx: preserve + +// @filename: index.tsx +declare namespace JSX { + interface IntrinsicElements extends Record {} +} + +;