Explorar el Código

fix: fix ts & add ts-check in github actions (#870)

* fix: fix ts & add ts-check in github actions

* fix: upload ts config for githb action

* chore: add error count
chenjiawei.inizio hace 3 meses
padre
commit
63f8557617
Se han modificado 33 ficheros con 98 adiciones y 50 borrados
  1. 2 0
      apps/demo-fixed-layout-simple/package.json
  2. 2 0
      apps/demo-fixed-layout/package.json
  3. 1 1
      apps/demo-fixed-layout/src/form-components/properties-edit/property-edit.tsx
  4. 2 2
      apps/demo-fixed-layout/src/typings/json-schema.ts
  5. 2 0
      apps/demo-free-layout-simple/package.json
  6. 2 0
      apps/demo-free-layout/package.json
  7. 1 1
      apps/demo-free-layout/src/components/comment/components/editor.tsx
  8. 1 1
      apps/demo-free-layout/src/components/comment/model.ts
  9. 2 2
      apps/demo-free-layout/src/components/node-menu/index.tsx
  10. 2 9
      apps/demo-free-layout/src/components/node-panel/index.tsx
  11. 2 2
      apps/demo-free-layout/src/nodes/http/form-meta.tsx
  12. 0 1
      apps/demo-free-layout/src/nodes/start/form-meta.tsx
  13. 1 1
      apps/demo-free-layout/src/nodes/variable/types.tsx
  14. 1 1
      apps/demo-free-layout/src/plugins/variable-panel-plugin/components/global-variable-editor.tsx
  15. 2 2
      apps/demo-free-layout/src/typings/json-schema.ts
  16. 0 1
      apps/demo-nextjs-antd/.gitignore
  17. 11 0
      apps/demo-nextjs-antd/next-env.d.ts
  18. 2 1
      apps/demo-nextjs-antd/package.json
  19. 2 1
      apps/demo-nextjs/package.json
  20. 2 0
      apps/demo-node-form/package.json
  21. 1 1
      apps/demo-node-form/src/components/field-wrapper.tsx
  22. 7 4
      apps/demo-node-form/src/editor.tsx
  23. 2 2
      apps/demo-node-form/src/hooks/use-editor-props.tsx
  24. 2 0
      apps/demo-playground/package.json
  25. 2 0
      apps/demo-react-16/package.json
  26. 0 2
      apps/demo-react-16/src/components/minimap.tsx
  27. 0 1
      apps/demo-react-16/src/components/tools.tsx
  28. 0 2
      apps/demo-react-16/src/editor.tsx
  29. 1 1
      apps/demo-react-16/src/hooks/use-editor-props.tsx
  30. 2 0
      apps/demo-vite/package.json
  31. 11 5
      common/autoinstallers/dep-check/dep-check.ts
  32. 6 6
      common/config/rush/command-line.json
  33. 24 0
      common/config/rush/pnpm-lock.yaml

+ 2 - 0
apps/demo-fixed-layout-simple/package.json

@@ -23,6 +23,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -46,6 +47,7 @@
     "@types/node": "^18",
     "@types/react": "^18",
     "@types/react-dom": "^18",
+    "typescript": "^5.8.3",
     "eslint": "^8.54.0",
     "cross-env": "~7.0.3"
   },

+ 2 - 0
apps/demo-fixed-layout/package.json

@@ -25,6 +25,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -57,6 +58,7 @@
     "@types/react-dom": "^18",
     "@types/styled-components": "^5",
     "@typescript-eslint/parser": "^6.10.0",
+    "typescript": "^5.8.3",
     "eslint": "^8.54.0",
     "less": "^4.1.2",
     "less-loader": "^6",

+ 1 - 1
apps/demo-fixed-layout/src/form-components/properties-edit/property-edit.tsx

@@ -5,7 +5,7 @@
 
 import React, { useState, useLayoutEffect } from 'react';
 
-import { VariableSelector, TypeSelector, DynamicValueInput } from '@flowgram.ai/form-materials';
+import { TypeSelector, DynamicValueInput } from '@flowgram.ai/form-materials';
 import { Input, Button } from '@douyinfe/semi-ui';
 import { IconCrossCircleStroked } from '@douyinfe/semi-icons';
 

+ 2 - 2
apps/demo-fixed-layout/src/typings/json-schema.ts

@@ -3,7 +3,7 @@
  * SPDX-License-Identifier: MIT
  */
 
-import type { IJsonSchema, IBasicJsonSchema } from '@flowgram.ai/form-materials';
+import type { IJsonSchema, JsonSchemaBasicType } from '@flowgram.ai/form-materials';
 
-export type BasicType = IBasicJsonSchema;
+export type BasicType = JsonSchemaBasicType;
 export type JsonSchema = IJsonSchema;

+ 2 - 0
apps/demo-free-layout-simple/package.json

@@ -23,6 +23,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -45,6 +46,7 @@
     "@types/react": "^18",
     "@types/react-dom": "^18",
     "@types/styled-components": "^5",
+    "typescript": "^5.8.3",
     "eslint": "^8.54.0",
     "cross-env": "~7.0.3"
   },

+ 2 - 0
apps/demo-free-layout/package.json

@@ -26,6 +26,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -63,6 +64,7 @@
     "@types/react": "^18",
     "@types/react-dom": "^18",
     "@types/styled-components": "^5",
+    "typescript": "^5.8.3",
     "eslint": "^8.54.0",
     "cross-env": "~7.0.3"
   },

+ 1 - 1
apps/demo-free-layout/src/components/comment/components/editor.tsx

@@ -3,7 +3,7 @@
  * SPDX-License-Identifier: MIT
  */
 
-import { type FC, type CSSProperties, useEffect, useRef, useState, useMemo } from 'react';
+import { type FC, type CSSProperties, useEffect, useRef } from 'react';
 
 import { usePlayground } from '@flowgram.ai/free-layout-editor';
 

+ 1 - 1
apps/demo-free-layout/src/components/comment/model.ts

@@ -47,7 +47,7 @@ export class CommentEditorModel {
   }
 
   /** 获取编辑器 DOM 节点 */
-  public get element(): HTMLTextAreaElement | null {
+  public get element(): HTMLTextAreaElement {
     return this.editor;
   }
 

+ 2 - 2
apps/demo-free-layout/src/components/node-menu/index.tsx

@@ -24,7 +24,7 @@ import { CopyShortcut } from '../../shortcuts/copy';
 
 interface NodeMenuProps {
   node: WorkflowNodeEntity;
-  updateTitleEdit: (setEditing: boolean) => void;
+  updateTitleEdit?: (setEditing: boolean) => void;
   deleteNode: () => void;
 }
 
@@ -87,7 +87,7 @@ export const NodeMenu: FC<NodeMenuProps> = ({ node, deleteNode, updateTitleEdit
   );
   const handleEditTitle = useCallback(
     (e: React.MouseEvent) => {
-      updateTitleEdit(true);
+      updateTitleEdit?.(true);
       e.stopPropagation(); // Disable clicking prevents the sidebar from opening
     },
     [updateTitleEdit]

+ 2 - 9
apps/demo-free-layout/src/components/node-panel/index.tsx

@@ -3,23 +3,16 @@
  * SPDX-License-Identifier: MIT
  */
 
-import { FC, useRef } from 'react';
+import { useRef } from 'react';
 
 import { NodePanelRenderProps as NodePanelRenderPropsDefault } from '@flowgram.ai/free-node-panel-plugin';
-import { WorkflowPortEntity } from '@flowgram.ai/free-layout-editor';
 import { Popover } from '@douyinfe/semi-ui';
 
 import { NodePlaceholder } from './node-placeholder';
 import { NodeList } from './node-list';
 import './index.less';
 
-interface NodePanelRenderProps extends NodePanelRenderPropsDefault {
-  panelProps: {
-    fromPort?: WorkflowPortEntity; // 从哪个端口添加 From which port to add
-    enableNodePlaceholder?: boolean;
-  };
-}
-export const NodePanel: FC<NodePanelRenderProps> = (props) => {
+export const NodePanel = (props: NodePanelRenderPropsDefault) => {
   const { onSelect, position, onClose, containerNode, panelProps = {} } = props;
   const { enableNodePlaceholder, fromPort } = panelProps;
   const ref = useRef<HTMLDivElement>(null);

+ 2 - 2
apps/demo-free-layout/src/nodes/http/form-meta.tsx

@@ -3,8 +3,8 @@
  * SPDX-License-Identifier: MIT
  */
 
-import { Field, FormMeta, FormRenderProps } from '@flowgram.ai/free-layout-editor';
-import { createInferInputsPlugin, DisplayOutputs, IJsonSchema } from '@flowgram.ai/form-materials';
+import { FormMeta, FormRenderProps } from '@flowgram.ai/free-layout-editor';
+import { createInferInputsPlugin, DisplayOutputs } from '@flowgram.ai/form-materials';
 import { Divider } from '@douyinfe/semi-ui';
 
 import { FormHeader, FormContent } from '../../form-components';

+ 0 - 1
apps/demo-free-layout/src/nodes/start/form-meta.tsx

@@ -12,7 +12,6 @@ import {
 } from '@flowgram.ai/free-layout-editor';
 import {
   DisplayOutputs,
-  IJsonSchema,
   JsonSchemaEditor,
   provideJsonSchemaOutputs,
   syncVariableTitle,

+ 1 - 1
apps/demo-free-layout/src/nodes/variable/types.tsx

@@ -4,7 +4,7 @@
  */
 
 import { FlowNodeJSON } from '@flowgram.ai/free-layout-editor';
-import { IFlowValue, IJsonSchema } from '@flowgram.ai/form-materials';
+import { AssignValueType, IJsonSchema } from '@flowgram.ai/form-materials';
 
 export interface VariableNodeJSON extends FlowNodeJSON {
   data: {

+ 1 - 1
apps/demo-free-layout/src/plugins/variable-panel-plugin/components/global-variable-editor.tsx

@@ -31,7 +31,7 @@ export function GlobalVariableEditor() {
   }, []);
 
   if (!globalVar) {
-    return;
+    return null;
   }
 
   const value = globalVar.type ? JsonSchemaUtils.astToSchema(globalVar.type) : { type: 'object' };

+ 2 - 2
apps/demo-free-layout/src/typings/json-schema.ts

@@ -3,7 +3,7 @@
  * SPDX-License-Identifier: MIT
  */
 
-import type { IJsonSchema, IBasicJsonSchema } from '@flowgram.ai/form-materials';
+import type { IJsonSchema, JsonSchemaBasicType } from '@flowgram.ai/form-materials';
 
-export type BasicType = IBasicJsonSchema;
+export type BasicType = JsonSchemaBasicType;
 export type JsonSchema = IJsonSchema;

+ 0 - 1
apps/demo-nextjs-antd/.gitignore

@@ -38,4 +38,3 @@ yarn-error.log*
 
 # typescript
 *.tsbuildinfo
-next-env.d.ts

+ 11 - 0
apps/demo-nextjs-antd/next-env.d.ts

@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
+ * SPDX-License-Identifier: MIT
+ */
+
+/// <reference types="next" />
+/// <reference types="next/image-types/global" />
+/// <reference path="./.next/types/routes.d.ts" />
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

+ 2 - 1
apps/demo-nextjs-antd/package.json

@@ -22,7 +22,8 @@
     "build:prod": "next build",
     "start": "next start",
     "lint": "eslint ./src --cache",
-    "lint:fix": "eslint ./src --fix"
+    "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit"
   },
   "dependencies": {
     "antd": "^5.25.4",

+ 2 - 1
apps/demo-nextjs/package.json

@@ -22,7 +22,8 @@
     "build:prod": "next build",
     "start": "next start",
     "lint": "eslint ./src --cache",
-    "lint:fix": "eslint ./src --fix"
+    "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit"
   },
   "dependencies": {
     "react": "^18",

+ 2 - 0
apps/demo-node-form/package.json

@@ -23,6 +23,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -50,6 +51,7 @@
     "@types/styled-components": "^5",
     "@typescript-eslint/parser": "^6.10.0",
     "eslint": "^8.54.0",
+    "typescript": "^5.8.3",
     "cross-env": "~7.0.3"
   },
   "publishConfig": {

+ 1 - 1
apps/demo-node-form/src/components/field-wrapper.tsx

@@ -11,7 +11,7 @@ interface FieldWrapperProps {
   required?: boolean;
   title?: string;
   children?: React.ReactNode;
-  error?: string;
+  error?: React.ReactNode;
   note?: string;
 }
 

+ 7 - 4
apps/demo-node-form/src/editor.tsx

@@ -14,12 +14,15 @@ import { useEditorProps } from './hooks/use-editor-props';
 import '@flowgram.ai/free-layout-editor/index.css';
 import './index.css';
 interface EditorProps {
-  registry: FlowNodeRegistry;
-  initialData: WorkflowJSON;
+  registries?: FlowNodeRegistry[];
+  initialData?: WorkflowJSON;
 }
 
-export const Editor = ({ registry, initialData }: EditorProps) => {
-  const editorProps = useEditorProps({ registries: [registry], initialData });
+export const Editor = ({ registries, initialData }: EditorProps) => {
+  const editorProps = useEditorProps({
+    registries,
+    initialData,
+  });
   return (
     <FreeLayoutEditorProvider {...editorProps}>
       <div className="demo-free-container">

+ 2 - 2
apps/demo-node-form/src/hooks/use-editor-props.tsx

@@ -21,8 +21,8 @@ import { DEFAULT_DEMO_REGISTRY } from '../node-registries';
 import { DEFAULT_INITIAL_DATA } from '../initial-data';
 
 interface EditorProps {
-  registries: FlowNodeRegistry[];
-  initialData: WorkflowJSON;
+  registries?: FlowNodeRegistry[];
+  initialData?: WorkflowJSON;
 }
 
 export const useEditorProps = ({

+ 2 - 0
apps/demo-playground/package.json

@@ -23,6 +23,7 @@
     "dev": "cross-env MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -44,6 +45,7 @@
     "@types/react-dom": "^18",
     "@types/styled-components": "^5",
     "eslint": "^8.54.0",
+    "typescript": "^5.8.3",
     "cross-env": "~7.0.3"
   },
   "publishConfig": {

+ 2 - 0
apps/demo-react-16/package.json

@@ -23,6 +23,7 @@
     "dev": "cross-env  MODE=app NODE_ENV=development rsbuild dev --open",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "start": "cross-env NODE_ENV=development rsbuild dev --open",
     "test": "exit",
     "test:cov": "exit",
@@ -46,6 +47,7 @@
     "@types/react-dom": "^16.8.6",
     "@types/styled-components": "^5",
     "eslint": "^8.54.0",
+    "typescript": "^5.8.3",
     "cross-env": "~7.0.3"
   },
   "publishConfig": {

+ 0 - 2
apps/demo-react-16/src/components/minimap.tsx

@@ -3,8 +3,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-import React from 'react';
-
 import { MinimapRender } from '@flowgram.ai/minimap-plugin';
 
 export const Minimap = () => (

+ 0 - 1
apps/demo-react-16/src/components/tools.tsx

@@ -3,7 +3,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-import React from 'react';
 import { useEffect, useState } from 'react';
 
 import { usePlaygroundTools, useClientContext } from '@flowgram.ai/free-layout-editor';

+ 0 - 2
apps/demo-react-16/src/editor.tsx

@@ -3,8 +3,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-import React from 'react';
-
 import { EditorRenderer, FreeLayoutEditorProvider } from '@flowgram.ai/free-layout-editor';
 
 import { useEditorProps } from './hooks/use-editor-props';

+ 1 - 1
apps/demo-react-16/src/hooks/use-editor-props.tsx

@@ -3,7 +3,7 @@
  * SPDX-License-Identifier: MIT
  */
 
-import React, { useMemo } from 'react';
+import { useMemo } from 'react';
 
 import { createMinimapPlugin } from '@flowgram.ai/minimap-plugin';
 import { createFreeSnapPlugin } from '@flowgram.ai/free-snap-plugin';

+ 2 - 0
apps/demo-vite/package.json

@@ -22,6 +22,7 @@
     "build:prod": "vite build",
     "lint": "eslint ./src --cache",
     "lint:fix": "eslint ./src --fix",
+    "ts-check": "tsc --noEmit",
     "test": "exit",
     "test:cov": "exit",
     "watch": "exit 0",
@@ -44,6 +45,7 @@
     "@types/react": "^18",
     "@types/react-dom": "^18",
     "eslint": "^8.54.0",
+    "typescript": "^5.8.3",
     "cross-env": "~7.0.3",
     "globals": "^15.11.0",
     "less": "^4.1.2",

+ 11 - 5
common/autoinstallers/dep-check/dep-check.ts

@@ -28,13 +28,14 @@ const options = {
 };
 
 // 异步检查未使用的依赖
-const checkUnusedDependencies = async (packagePath) => {
+const checkUnusedDependencies = async (packagePath): Promise<number> => {
+  let unUsedNum = 0;
   const packageJsonPath = path.join(packagePath, "package.json");
-  if (!fs.existsSync(packageJsonPath)) return;
+  if (!fs.existsSync(packageJsonPath)) return unUsedNum;
 
   if (packagePath.includes('/apps/') || packagePath.includes('/common/') || packagePath.includes('/config/')) {
     console.log('✅ skip apps & common & config')
-    return;
+    return unUsedNum;
   }
   console.log(`\n🔍 Checking unused dependencies in ${packagePath}...`);
   const result = await depcheck(packagePath, options);
@@ -42,26 +43,31 @@ const checkUnusedDependencies = async (packagePath) => {
   if (result.dependencies.length || result.devDependencies.length) {
     console.log(`🚨 Unused dependencies found in ${packagePath}:`);
     if (result.dependencies.length) {
+      unUsedNum += result.dependencies.length
       console.log(`  📦 Unused dependencies: ${result.dependencies.join(", ")}`);
     }
     if (result.devDependencies.length) {
+      unUsedNum += result.devDependencies.length
       console.log(`  📦 Unused devDependencies: ${result.devDependencies.join(", ")}`);
     }
   } else {
     console.log(`✅ No unused dependencies found in ${packagePath}`);
   }
+  return unUsedNum;
 };
 
 export async function runCheckDep(): Promise<void> {
   // 遍历所有 Rush 项目
   (async () => {
+    let unUsedNum = 0
     for (const pkgPath of packages) {
       const fullPath = pkgPath;
       if (fs.existsSync(path.join(fullPath, "package.json"))) {
-        await checkUnusedDependencies(fullPath);
+        const newNum = await checkUnusedDependencies(fullPath);
+        unUsedNum += newNum;
       }
     }
-    console.log("\n✅ Unused dependency check completed!");
+    console.log(`\n✅ Unused dependency check completed! find ${unUsedNum} Error`);
   })();
 }
 

+ 6 - 6
common/config/rush/command-line.json

@@ -302,7 +302,7 @@
 			"summary": "⭐️️ run dev in app/demo-fixed-layout",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-fixed-layout\" \"cd apps/demo-fixed-layout && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-fixed-layout\" \"cd apps/demo-fixed-layout && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "dev:demo-fixed-layout-simple",
@@ -310,7 +310,7 @@
 			"summary": "⭐️️ run dev in app/demo-fixed-layout-simple",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-fixed-layout-simple\" \"cd apps/demo-fixed-layout-simple && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-fixed-layout-simple\" \"cd apps/demo-fixed-layout-simple && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "dev:demo-free-layout",
@@ -318,7 +318,7 @@
 			"summary": "⭐️️ run dev in app/demo-free-layout",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-free-layout\" \"cd apps/demo-free-layout && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-free-layout\" \"cd apps/demo-free-layout && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "dev:demo-free-layout-simple",
@@ -326,7 +326,7 @@
 			"summary": "⭐️️ run dev in app/demo-free-layout-simple",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-free-layout-simple\" \"cd apps/demo-free-layout-simple && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-free-layout-simple\" \"cd apps/demo-free-layout-simple && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "dev:demo-nextjs",
@@ -334,7 +334,7 @@
 			"summary": "⭐️️ run dev in app/demo-nextjs",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-nextjs\" \"cd apps/demo-nextjs && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-nextjs\" \"cd apps/demo-nextjs && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "dev:demo-nextjs-antd",
@@ -342,7 +342,7 @@
 			"summary": "⭐️️ run dev in app/demo-nextjs-antd",
 			"autoinstallerName": "rush-commands",
 			"safeForSimultaneousRushProcesses": true,
-			"shellCommand": "concurrently --kill-others --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-nextjs-antd\" \"cd apps/demo-nextjs-antd && rushx dev\""
+			"shellCommand": "concurrently --kill-others --raw --prefix \"{name}\" --names [watch],[demo] -c white,blue \"rush build:watch --to-except @flowgram.ai/demo-nextjs-antd\" \"cd apps/demo-nextjs-antd && rushx ts-check && rushx dev\""
 		},
 		{
 			"name": "license-header",

+ 24 - 0
common/config/rush/pnpm-lock.yaml

@@ -186,6 +186,9 @@ importers:
       less-loader:
         specifier: ^6
         version: 6.2.0(webpack@5.101.3)
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-fixed-layout-simple:
     dependencies:
@@ -241,6 +244,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-free-layout:
     dependencies:
@@ -338,6 +344,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-free-layout-simple:
     dependencies:
@@ -390,6 +399,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-nextjs:
     dependencies:
@@ -654,6 +666,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-playground:
     dependencies:
@@ -700,6 +715,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-react-16:
     dependencies:
@@ -752,6 +770,9 @@ importers:
       eslint:
         specifier: ^8.54.0
         version: 8.57.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
 
   ../../apps/demo-vite:
     dependencies:
@@ -807,6 +828,9 @@ importers:
       less:
         specifier: ^4.1.2
         version: 4.4.1
+      typescript:
+        specifier: ^5.8.3
+        version: 5.9.2
       vite:
         specifier: ^6.3.6
         version: 6.3.6(@types/node@18.19.124)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.92.1)(terser@5.44.0)(tsx@4.19.4)(yaml@2.8.1)