From 5f222c738a8858cf826002680cedd590f591bd17 Mon Sep 17 00:00:00 2001 From: Moir Date: Tue, 15 Apr 2025 14:46:11 +0800 Subject: [PATCH 01/21] fix(create-rspeedy): monorepo type error --- packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json b/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json index 802b9e24d8..dbd117d264 100644 --- a/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json +++ b/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "jsx": "preserve", + "jsx": "react-jsx", "module": "node16", "moduleResolution": "node16", From 73945ffe589deea05c3acd17e9fa52fe57e304b7 Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 14:13:41 +0800 Subject: [PATCH 02/21] feat(react):standalone namespace JSX --- packages/react/runtime/jsx-dev-runtime/index.d.ts | 12 ++++++++++++ packages/react/runtime/jsx-runtime/index.d.ts | 12 ++++++++++++ .../create-rspeedy/template-react-ts/tsconfig.json | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/react/runtime/jsx-dev-runtime/index.d.ts b/packages/react/runtime/jsx-dev-runtime/index.d.ts index fc78a67e03..e96dc9255a 100644 --- a/packages/react/runtime/jsx-dev-runtime/index.d.ts +++ b/packages/react/runtime/jsx-dev-runtime/index.d.ts @@ -3,3 +3,15 @@ // LICENSE file in the root directory of this source tree. export { jsxDEV, Fragment } from 'react/jsx-dev-runtime'; export { jsx, jsxs } from 'react/jsx-runtime'; +import { JSX as _JSX } from 'react'; + +export namespace JSX { + interface IntrinsicElements extends _IntrinsicElements { + } + + interface IntrinsicAttributes { + ref?: unknown | ((e: unknown) => void) | undefined; + } + + type Element = _JSX.Element; +} diff --git a/packages/react/runtime/jsx-runtime/index.d.ts b/packages/react/runtime/jsx-runtime/index.d.ts index 756bbc4128..86f3d23233 100644 --- a/packages/react/runtime/jsx-runtime/index.d.ts +++ b/packages/react/runtime/jsx-runtime/index.d.ts @@ -2,3 +2,15 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. export { jsx, jsxs, Fragment } from 'react/jsx-runtime'; +import { JSX as _JSX } from 'react'; + +export namespace JSX { + interface IntrinsicElements extends _IntrinsicElements { + } + + interface IntrinsicAttributes { + ref?: unknown | ((e: unknown) => void) | undefined; + } + + type Element = _JSX.Element; +} diff --git a/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json b/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json index dbd117d264..156bf57426 100644 --- a/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json +++ b/packages/rspeedy/create-rspeedy/template-react-ts/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "jsx": "react-jsx", - + "jsxImportSource": "@lynx-js/react", "module": "node16", "moduleResolution": "node16", From 95c595a90b7d2f490be8b3b9113f6f3879b1b8fa Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 14:29:17 +0800 Subject: [PATCH 03/21] chore: import types --- packages/react/runtime/jsx-dev-runtime/index.d.ts | 1 + packages/react/runtime/jsx-runtime/index.d.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/react/runtime/jsx-dev-runtime/index.d.ts b/packages/react/runtime/jsx-dev-runtime/index.d.ts index e96dc9255a..7336436a89 100644 --- a/packages/react/runtime/jsx-dev-runtime/index.d.ts +++ b/packages/react/runtime/jsx-dev-runtime/index.d.ts @@ -3,6 +3,7 @@ // LICENSE file in the root directory of this source tree. export { jsxDEV, Fragment } from 'react/jsx-dev-runtime'; export { jsx, jsxs } from 'react/jsx-runtime'; +import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; import { JSX as _JSX } from 'react'; export namespace JSX { diff --git a/packages/react/runtime/jsx-runtime/index.d.ts b/packages/react/runtime/jsx-runtime/index.d.ts index 86f3d23233..b0017aba36 100644 --- a/packages/react/runtime/jsx-runtime/index.d.ts +++ b/packages/react/runtime/jsx-runtime/index.d.ts @@ -2,6 +2,7 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. export { jsx, jsxs, Fragment } from 'react/jsx-runtime'; +import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; import { JSX as _JSX } from 'react'; export namespace JSX { From 8e182ebe49612b004a43c9a93eef6b7c494dd822 Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 19:33:28 +0800 Subject: [PATCH 04/21] chore: remove ref types , WIP --- packages/react/runtime/jsx-dev-runtime/index.d.ts | 11 ++++------- packages/react/runtime/jsx-runtime/index.d.ts | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/react/runtime/jsx-dev-runtime/index.d.ts b/packages/react/runtime/jsx-dev-runtime/index.d.ts index 7336436a89..a37f64a191 100644 --- a/packages/react/runtime/jsx-dev-runtime/index.d.ts +++ b/packages/react/runtime/jsx-dev-runtime/index.d.ts @@ -3,16 +3,13 @@ // LICENSE file in the root directory of this source tree. export { jsxDEV, Fragment } from 'react/jsx-dev-runtime'; export { jsx, jsxs } from 'react/jsx-runtime'; -import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; -import { JSX as _JSX } from 'react'; +import { IntrinsicElements as _IntrinsicElements, type NodesRef } from '@lynx-js/types'; +import { JSX as _JSX, type Ref } from 'react'; export namespace JSX { - interface IntrinsicElements extends _IntrinsicElements { - } + interface IntrinsicElements extends _IntrinsicElements {} - interface IntrinsicAttributes { - ref?: unknown | ((e: unknown) => void) | undefined; - } + interface IntrinsicAttributes {} type Element = _JSX.Element; } diff --git a/packages/react/runtime/jsx-runtime/index.d.ts b/packages/react/runtime/jsx-runtime/index.d.ts index b0017aba36..717d6a63b5 100644 --- a/packages/react/runtime/jsx-runtime/index.d.ts +++ b/packages/react/runtime/jsx-runtime/index.d.ts @@ -2,16 +2,13 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. export { jsx, jsxs, Fragment } from 'react/jsx-runtime'; -import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; -import { JSX as _JSX } from 'react'; +import { IntrinsicElements as _IntrinsicElements, type NodesRef } from '@lynx-js/types'; +import { JSX as _JSX, type Ref } from 'react'; export namespace JSX { - interface IntrinsicElements extends _IntrinsicElements { - } + interface IntrinsicElements extends _IntrinsicElements {} - interface IntrinsicAttributes { - ref?: unknown | ((e: unknown) => void) | undefined; - } + interface IntrinsicAttributes {} type Element = _JSX.Element; } From 381b5ca5dfe3aa9558436ba055846eed2caad149 Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 22:28:00 +0800 Subject: [PATCH 05/21] chore: add typecheck --- .../__test__/typecheck/jsx-runtime.test-d.tsx | 21 +++++++++++++++++++ .../react/runtime/jsx-dev-runtime/index.d.ts | 2 +- packages/react/runtime/jsx-runtime/index.d.ts | 2 +- packages/react/runtime/package.json | 3 ++- packages/react/runtime/tsconfig.json | 3 ++- 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx new file mode 100644 index 0000000000..ca68fe920a --- /dev/null +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -0,0 +1,21 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { assertType, describe, test } from 'vitest'; +import { JSX } from '../../jsx-runtime/index'; +import React from 'react'; + +describe('JSX Runtime Types', () => { + test('should support basic JSX element', () => { + const viewEle = ; + assertType(viewEle); + }); + + test('should validate the required props for raw-text', () => { + // @ts-expect-error: Missing required prop 'text' + const shouldError = ; + + const rawTextELe = ; + assertType(rawTextELe); + }); +}); diff --git a/packages/react/runtime/jsx-dev-runtime/index.d.ts b/packages/react/runtime/jsx-dev-runtime/index.d.ts index a37f64a191..6cd54f88a2 100644 --- a/packages/react/runtime/jsx-dev-runtime/index.d.ts +++ b/packages/react/runtime/jsx-dev-runtime/index.d.ts @@ -3,7 +3,7 @@ // LICENSE file in the root directory of this source tree. export { jsxDEV, Fragment } from 'react/jsx-dev-runtime'; export { jsx, jsxs } from 'react/jsx-runtime'; -import { IntrinsicElements as _IntrinsicElements, type NodesRef } from '@lynx-js/types'; +import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; import { JSX as _JSX, type Ref } from 'react'; export namespace JSX { diff --git a/packages/react/runtime/jsx-runtime/index.d.ts b/packages/react/runtime/jsx-runtime/index.d.ts index 717d6a63b5..f0b2117c87 100644 --- a/packages/react/runtime/jsx-runtime/index.d.ts +++ b/packages/react/runtime/jsx-runtime/index.d.ts @@ -2,7 +2,7 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. export { jsx, jsxs, Fragment } from 'react/jsx-runtime'; -import { IntrinsicElements as _IntrinsicElements, type NodesRef } from '@lynx-js/types'; +import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; import { JSX as _JSX, type Ref } from 'react'; export namespace JSX { diff --git a/packages/react/runtime/package.json b/packages/react/runtime/package.json index 7d1678a9b5..1154249f6e 100644 --- a/packages/react/runtime/package.json +++ b/packages/react/runtime/package.json @@ -15,7 +15,8 @@ "src" ], "scripts": { - "test": "vitest run --coverage" + "test": "vitest run --coverage", + "test:type": "vitest --typecheck.only" }, "devDependencies": { "@lynx-js/react": "workspace:*", diff --git a/packages/react/runtime/tsconfig.json b/packages/react/runtime/tsconfig.json index 8be65ccae3..6370ce3dd1 100644 --- a/packages/react/runtime/tsconfig.json +++ b/packages/react/runtime/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "./lib", "baseUrl": "./", "rootDir": "./src", - "jsx": "preserve", + "jsx": "react-jsx", + "jsxImportSource": "./", }, "references": [{ "path": "../worklet-runtime/tsconfig.json", From 044353b4bb38a4a71116bc069e69b830d48707f5 Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 22:44:52 +0800 Subject: [PATCH 06/21] style: remove redundant imports --- packages/react/runtime/jsx-dev-runtime/index.d.ts | 2 +- packages/react/runtime/jsx-runtime/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/runtime/jsx-dev-runtime/index.d.ts b/packages/react/runtime/jsx-dev-runtime/index.d.ts index 6cd54f88a2..ac0b7bdb09 100644 --- a/packages/react/runtime/jsx-dev-runtime/index.d.ts +++ b/packages/react/runtime/jsx-dev-runtime/index.d.ts @@ -4,7 +4,7 @@ export { jsxDEV, Fragment } from 'react/jsx-dev-runtime'; export { jsx, jsxs } from 'react/jsx-runtime'; import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; -import { JSX as _JSX, type Ref } from 'react'; +import { JSX as _JSX } from 'react'; export namespace JSX { interface IntrinsicElements extends _IntrinsicElements {} diff --git a/packages/react/runtime/jsx-runtime/index.d.ts b/packages/react/runtime/jsx-runtime/index.d.ts index f0b2117c87..886c6ce243 100644 --- a/packages/react/runtime/jsx-runtime/index.d.ts +++ b/packages/react/runtime/jsx-runtime/index.d.ts @@ -3,7 +3,7 @@ // LICENSE file in the root directory of this source tree. export { jsx, jsxs, Fragment } from 'react/jsx-runtime'; import { IntrinsicElements as _IntrinsicElements } from '@lynx-js/types'; -import { JSX as _JSX, type Ref } from 'react'; +import { JSX as _JSX } from 'react'; export namespace JSX { interface IntrinsicElements extends _IntrinsicElements {} From 6ddd58f2b3c6d1c9e3f798a548ff416e22e8eb3a Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 22:55:52 +0800 Subject: [PATCH 07/21] chore: export JSX --- .../runtime/__test__/typecheck/jsx-runtime.test-d.tsx | 10 ++++++++++ packages/react/runtime/src/index.ts | 1 + 2 files changed, 11 insertions(+) diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index ca68fe920a..b6e6287322 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -18,4 +18,14 @@ describe('JSX Runtime Types', () => { const rawTextELe = ; assertType(rawTextELe); }); + + test('should support JSX element with children', () => { + function App() { + function renderFoo(): JSX.Element { + return ; + } + return renderFoo(); + } + assertType(App()); + }); }); diff --git a/packages/react/runtime/src/index.ts b/packages/react/runtime/src/index.ts index 23f30b5665..562713f000 100644 --- a/packages/react/runtime/src/index.ts +++ b/packages/react/runtime/src/index.ts @@ -87,3 +87,4 @@ export { }; export * from './lynx-api.js'; +export type { JSX } from '../jsx-runtime/index.d.ts'; From afcb43663410fa82967b3965a2620bf6c7809e00 Mon Sep 17 00:00:00 2001 From: Moir Date: Wed, 16 Apr 2025 23:01:18 +0800 Subject: [PATCH 08/21] chore: some text... --- .../react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index b6e6287322..a0d303863d 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -19,7 +19,7 @@ describe('JSX Runtime Types', () => { assertType(rawTextELe); }); - test('should support JSX element with children', () => { + test('should support JSX.Elements', () => { function App() { function renderFoo(): JSX.Element { return ; From 306b051844a2e4a39e099b50ce15aa54580d2c70 Mon Sep 17 00:00:00 2001 From: Moir Date: Thu, 17 Apr 2025 11:57:13 +0800 Subject: [PATCH 09/21] fix: export JSX --- packages/react/runtime/src/index.ts | 1 - packages/react/types/react.d.ts | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react/runtime/src/index.ts b/packages/react/runtime/src/index.ts index 084e5ac3da..387feb890c 100644 --- a/packages/react/runtime/src/index.ts +++ b/packages/react/runtime/src/index.ts @@ -90,4 +90,3 @@ export { }; export * from './lynx-api.js'; -export type { JSX } from '../jsx-runtime/index.d.ts'; diff --git a/packages/react/types/react.d.ts b/packages/react/types/react.d.ts index e4b6cdc075..9068c0a707 100644 --- a/packages/react/types/react.d.ts +++ b/packages/react/types/react.d.ts @@ -145,3 +145,5 @@ declare module '@lynx-js/types' { 'reuse-identifier'?: Key; } } + +export type { JSX } from '../runtime/jsx-runtime/index.d.ts'; From 31c5310bee90a12e49ac22aff771bed74a30da7d Mon Sep 17 00:00:00 2001 From: Moir Date: Thu, 17 Apr 2025 16:48:08 +0800 Subject: [PATCH 10/21] chore:add tscofnig and type tests --- packages/react/runtime/__test__/tsconfig.json | 9 +++ .../__test__/typecheck/jsx-runtime.test-d.tsx | 69 ++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 packages/react/runtime/__test__/tsconfig.json diff --git a/packages/react/runtime/__test__/tsconfig.json b/packages/react/runtime/__test__/tsconfig.json new file mode 100644 index 0000000000..665574cb8c --- /dev/null +++ b/packages/react/runtime/__test__/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "@lynx-js/react", + "noEmit": true, + }, + "include": ["**/*.ts", "**/*.tsx", "../../types/react.d.ts"], +} diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index a0d303863d..ee9aed1f02 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -2,8 +2,10 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. import { assertType, describe, test } from 'vitest'; -import { JSX } from '../../jsx-runtime/index'; -import React from 'react'; +import type { JSX } from '../../jsx-runtime/index.js'; +import type { MainThread, NodesRef, TouchEvent } from '@lynx-js/types'; +import { useMainThreadRef } from '../../lib/lynx-api.js'; +import { useRef } from '../../lib/hooks/react.js'; describe('JSX Runtime Types', () => { test('should support basic JSX element', () => { @@ -28,4 +30,67 @@ describe('JSX Runtime Types', () => { } assertType(App()); }); + + test('should error on unsupported tags', () => { + // @ts-expect-error: Unsupported tag + const divElement =
; + }); + + test('should support event handlers', () => { + const viewWithBind = ( + { + e.currentTarget; + }} + > + + ); + const viewWithCatch = ( + { + e.currentTarget; + }} + > + + ); + assertType(viewWithBind); + assertType(viewWithCatch); + }); + + test('should support main-thread event handlers', () => { + const viewWithMainThreadEvent = ( + { + e.currentTarget; + }} + > + + ); + assertType(viewWithMainThreadEvent); + }); + + test('should support ref prop with ref object', () => { + const ref = useRef(null); + const viewWithRefObject = ; + assertType(viewWithRefObject); + }); + + test('should support ref prop with function', () => { + const ref = useRef(null); + const viewWithRefCallback = ( + { + ref.current = n; + }} + > + + ); + assertType(viewWithRefCallback); + }); + + test('should support main-thread ref', () => { + const mtRef = useMainThreadRef(null); + const viewWithMainThreadRef = ; + assertType(viewWithMainThreadRef); + }); }); From 4846f025e2ec61c8151bca1f3f5b388c863cc4c7 Mon Sep 17 00:00:00 2001 From: Moir Date: Thu, 17 Apr 2025 16:53:34 +0800 Subject: [PATCH 11/21] chore: check --- .../runtime/__test__/typecheck/jsx-runtime.test-d.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index ee9aed1f02..732772d672 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -1,15 +1,19 @@ // Copyright 2024 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. -import { assertType, describe, test } from 'vitest'; import type { JSX } from '../../jsx-runtime/index.js'; import type { MainThread, NodesRef, TouchEvent } from '@lynx-js/types'; +import { assertType, describe, test } from 'vitest'; import { useMainThreadRef } from '../../lib/lynx-api.js'; import { useRef } from '../../lib/hooks/react.js'; describe('JSX Runtime Types', () => { test('should support basic JSX element', () => { - const viewEle = ; + const viewEle = ( + + child node + + ); assertType(viewEle); }); From e689d0eb5502dcfee9965fff9a513d8be2883cfc Mon Sep 17 00:00:00 2001 From: Moir Date: Thu, 17 Apr 2025 20:06:24 +0800 Subject: [PATCH 12/21] chore: modify tests --- .../__test__/typecheck/jsx-runtime.test-d.tsx | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index 732772d672..41c99a52cb 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -2,10 +2,10 @@ // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. import type { JSX } from '../../jsx-runtime/index.js'; -import type { MainThread, NodesRef, TouchEvent } from '@lynx-js/types'; +import type { MainThread, NodesRef, Target, TouchEvent } from '@lynx-js/types'; import { assertType, describe, test } from 'vitest'; -import { useMainThreadRef } from '../../lib/lynx-api.js'; -import { useRef } from '../../lib/hooks/react.js'; +import { useMainThreadRef } from '../../src/lynx-api.js'; +import { useRef } from '../../src/hooks/react.js'; describe('JSX Runtime Types', () => { test('should support basic JSX element', () => { @@ -43,16 +43,18 @@ describe('JSX Runtime Types', () => { test('should support event handlers', () => { const viewWithBind = ( { - e.currentTarget; + bindtap={(e) => { + assertType(e.detail.x); + assertType(e); }} > ); const viewWithCatch = ( { - e.currentTarget; + catchtap={(e) => { + assertType(e.currentTarget); + assertType(e); }} > @@ -64,8 +66,9 @@ describe('JSX Runtime Types', () => { test('should support main-thread event handlers', () => { const viewWithMainThreadEvent = ( { - e.currentTarget; + main-thread:bindtap={(e) => { + assertType(e.detail.x); + assertType(e.currentTarget); }} > From 8d22d9d11893b40d3c6007a6c3d92bd59bf1d2d5 Mon Sep 17 00:00:00 2001 From: Moir Date: Thu, 17 Apr 2025 20:22:03 +0800 Subject: [PATCH 13/21] chore: modify tests --- packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx index 41c99a52cb..5ea4d19673 100644 --- a/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx +++ b/packages/react/runtime/__test__/typecheck/jsx-runtime.test-d.tsx @@ -87,6 +87,7 @@ describe('JSX Runtime Types', () => { const viewWithRefCallback = ( { + assertType(n); ref.current = n; }} > From b2f65e72882faf452a7089760476ac36a76f1a19 Mon Sep 17 00:00:00 2001 From: Qingyu Wang <40660121+colinaaa@users.noreply.github.com> Date: Thu, 17 Apr 2025 20:44:01 +0800 Subject: [PATCH 14/21] Create orange-days-chew.md Signed-off-by: Qingyu Wang <40660121+colinaaa@users.noreply.github.com> --- .changeset/orange-days-chew.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .changeset/orange-days-chew.md diff --git a/.changeset/orange-days-chew.md b/.changeset/orange-days-chew.md new file mode 100644 index 0000000000..2db991cc5c --- /dev/null +++ b/.changeset/orange-days-chew.md @@ -0,0 +1,17 @@ +--- +"@lynx-js/react": patch +--- + +Support using `"jsx": "react-jsx"` along with `"jsxImportSource": "@lynx-js/react"` in `tsconfig.json`. + +```json +{ + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "@lynx-js/react" + } +} +``` + +This configuration enhances TypeScript definitions for standard JSX elements, +providing type errors for unsupported elements like `
` or `