diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index db318e4eb1..78481c17d1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10905,7 +10905,7 @@ namespace ts { function checkJsxExpression(node: JsxExpression) { if (node.expression) { const type = checkExpression(node.expression); - if (node.dotDotDotToken && !isArrayType(type)) { + if (node.dotDotDotToken && type !== anyType && !isArrayType(type)) { error(node, Diagnostics.JSX_spread_child_must_be_an_array_type, node.toString(), typeToString(type)); } return type; diff --git a/tests/baselines/reference/tsxSpreadChildrenInvalidType.errors.txt b/tests/baselines/reference/tsxSpreadChildrenInvalidType.errors.txt index d052654167..d1524c6bf3 100644 --- a/tests/baselines/reference/tsxSpreadChildrenInvalidType.errors.txt +++ b/tests/baselines/reference/tsxSpreadChildrenInvalidType.errors.txt @@ -27,6 +27,12 @@ tests/cases/conformance/jsx/tsxSpreadChildrenInvalidType.tsx(21,9): error TS2609 !!! error TS2609: JSX spread child must be an array type. ; } + function TodoListNoError({ todos }: TodoListProps) { + // any is not checked + return
+ {...( as any)} +
; + } let x: TodoListProps; \ No newline at end of file diff --git a/tests/baselines/reference/tsxSpreadChildrenInvalidType.js b/tests/baselines/reference/tsxSpreadChildrenInvalidType.js index 507b36665d..e9873bfb23 100644 --- a/tests/baselines/reference/tsxSpreadChildrenInvalidType.js +++ b/tests/baselines/reference/tsxSpreadChildrenInvalidType.js @@ -22,6 +22,12 @@ function TodoList({ todos }: TodoListProps) { {...} ; } +function TodoListNoError({ todos }: TodoListProps) { + // any is not checked + return
+ {...( as any)} +
; +} let x: TodoListProps; @@ -42,5 +48,10 @@ function TodoList(_a) { var todos = _a.todos; return React.createElement("div", null, React.createElement(Todo, { key: todos[0].id, todo: todos[0].todo })); } +function TodoListNoError(_a) { + var todos = _a.todos; + // any is not checked + return React.createElement("div", null, React.createElement(Todo, { key: todos[0].id, todo: todos[0].todo })); +} var x; React.createElement(TodoList, __assign({}, x)); diff --git a/tests/cases/conformance/jsx/tsxSpreadChildrenInvalidType.tsx b/tests/cases/conformance/jsx/tsxSpreadChildrenInvalidType.tsx index 20f7d4fae8..41181618ce 100644 --- a/tests/cases/conformance/jsx/tsxSpreadChildrenInvalidType.tsx +++ b/tests/cases/conformance/jsx/tsxSpreadChildrenInvalidType.tsx @@ -22,5 +22,11 @@ function TodoList({ todos }: TodoListProps) { {...} ; } +function TodoListNoError({ todos }: TodoListProps) { + // any is not checked + return
+ {...( as any)} +
; +} let x: TodoListProps;