diff --git a/apps/E2E/package.json b/apps/E2E/package.json
index e6d2ff65f3..f0ed11e639 100644
--- a/apps/E2E/package.json
+++ b/apps/E2E/package.json
@@ -76,7 +76,6 @@
"metro-config": "^0.80.3",
"rimraf": "^5.0.1",
"ts-node": "^10.7.0",
- "typescript": "^5.8.0",
"webdriverio": "catalog:"
},
"installConfig": {
diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json
index 3a739f81b6..fde1fe1021 100644
--- a/apps/fluent-tester/package.json
+++ b/apps/fluent-tester/package.json
@@ -126,7 +126,6 @@
"react-native-svg-transformer": "^1.0.0",
"react-native-test-app": "^3.9.2",
"react-test-renderer": "18.2.0",
- "typescript": "^5.8.0",
"webdriverio": "catalog:"
},
"jest": {
diff --git a/apps/win32/package.json b/apps/win32/package.json
index 02b8fb6b58..291c5264a5 100644
--- a/apps/win32/package.json
+++ b/apps/win32/package.json
@@ -56,8 +56,7 @@
"metro-config": "^0.80.3",
"react-native-svg-transformer": "^1.0.0",
"react-test-renderer": "18.2.0",
- "rimraf": "^5.0.1",
- "typescript": "4.9.4"
+ "rimraf": "^5.0.1"
},
"jest": {
"preset": "react-native"
diff --git a/change/@fluentui-react-native-2552706f-e2bf-48ec-9338-40f70585ef0a.json b/change/@fluentui-react-native-2552706f-e2bf-48ec-9338-40f70585ef0a.json
new file mode 100644
index 0000000000..eb544f63ac
--- /dev/null
+++ b/change/@fluentui-react-native-2552706f-e2bf-48ec-9338-40f70585ef0a.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui/react-native",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-composition-963099f4-6c7f-4550-b115-cf4c2aef586c.json b/change/@fluentui-react-native-composition-963099f4-6c7f-4550-b115-cf4c2aef586c.json
new file mode 100644
index 0000000000..0d7be90c51
--- /dev/null
+++ b/change/@fluentui-react-native-composition-963099f4-6c7f-4550-b115-cf4c2aef586c.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/composition",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-e2e-testing-0c3def4f-56a5-4bb1-a0a6-8ab07b83a644.json b/change/@fluentui-react-native-e2e-testing-0c3def4f-56a5-4bb1-a0a6-8ab07b83a644.json
new file mode 100644
index 0000000000..f1ba3f6c34
--- /dev/null
+++ b/change/@fluentui-react-native-e2e-testing-0c3def4f-56a5-4bb1-a0a6-8ab07b83a644.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/e2e-testing",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-framework-base-e2a8b64d-6fa9-4391-a923-ec253f174196.json b/change/@fluentui-react-native-framework-base-e2a8b64d-6fa9-4391-a923-ec253f174196.json
new file mode 100644
index 0000000000..414dac6bcb
--- /dev/null
+++ b/change/@fluentui-react-native-framework-base-e2a8b64d-6fa9-4391-a923-ec253f174196.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/framework-base",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-link-03b8b201-a7f2-48c0-9cc1-b46312059e92.json b/change/@fluentui-react-native-link-03b8b201-a7f2-48c0-9cc1-b46312059e92.json
new file mode 100644
index 0000000000..9206996de4
--- /dev/null
+++ b/change/@fluentui-react-native-link-03b8b201-a7f2-48c0-9cc1-b46312059e92.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/link",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-menu-f3879ad2-c25c-4130-88c4-d016f9973466.json b/change/@fluentui-react-native-menu-f3879ad2-c25c-4130-88c4-d016f9973466.json
new file mode 100644
index 0000000000..66d6926d96
--- /dev/null
+++ b/change/@fluentui-react-native-menu-f3879ad2-c25c-4130-88c4-d016f9973466.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/menu",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-tester-b64bc336-b954-4a11-9265-d74646de4651.json b/change/@fluentui-react-native-tester-b64bc336-b954-4a11-9265-d74646de4651.json
new file mode 100644
index 0000000000..2fc82e7950
--- /dev/null
+++ b/change/@fluentui-react-native-tester-b64bc336-b954-4a11-9265-d74646de4651.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/tester",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-tester-win32-3a4e8f94-8fa9-4d13-960b-0edf342aea99.json b/change/@fluentui-react-native-tester-win32-3a4e8f94-8fa9-4d13-960b-0edf342aea99.json
new file mode 100644
index 0000000000..e9d763dea7
--- /dev/null
+++ b/change/@fluentui-react-native-tester-win32-3a4e8f94-8fa9-4d13-960b-0edf342aea99.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/tester-win32",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-text-67789c0c-338f-4dba-95db-266880f9c1e2.json b/change/@fluentui-react-native-text-67789c0c-338f-4dba-95db-266880f9c1e2.json
new file mode 100644
index 0000000000..08fc14e478
--- /dev/null
+++ b/change/@fluentui-react-native-text-67789c0c-338f-4dba-95db-266880f9c1e2.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/text",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-native-use-slot-1fce7885-a2a7-4a22-859c-7b856fc86b40.json b/change/@fluentui-react-native-use-slot-1fce7885-a2a7-4a22-859c-7b856fc86b40.json
new file mode 100644
index 0000000000..4b6488b43b
--- /dev/null
+++ b/change/@fluentui-react-native-use-slot-1fce7885-a2a7-4a22-859c-7b856fc86b40.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@fluentui-react-native/use-slot",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@uifabricshared-theming-react-native-a5e7705e-dcba-45bf-af47-d25599dcd0fb.json b/change/@uifabricshared-theming-react-native-a5e7705e-dcba-45bf-af47-d25599dcd0fb.json
new file mode 100644
index 0000000000..1fe9df713b
--- /dev/null
+++ b/change/@uifabricshared-theming-react-native-a5e7705e-dcba-45bf-af47-d25599dcd0fb.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "switch repo to typescript 5.x",
+ "packageName": "@uifabricshared/theming-react-native",
+ "email": "jasonmo@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/package.json b/package.json
index 010f471f91..52fec52321 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,7 @@
"prettier": "^2.4.1",
"react": "18.2.0",
"react-native": "^0.74.0",
- "typescript": "^4.9.4"
+ "typescript": "^5.8.0"
},
"workspaces": [
"apps/*",
diff --git a/packages/components/Link/src/useLink.ts b/packages/components/Link/src/useLink.ts
index 1ad3484e39..131d82a6e2 100644
--- a/packages/components/Link/src/useLink.ts
+++ b/packages/components/Link/src/useLink.ts
@@ -12,7 +12,7 @@ import {
import type { LinkProps, LinkInfo } from './Link.types';
/*These callbacks are not implemented on iOS/macOS, and cause Redboxes if passed in. Limit to only windows/win32 for now*/
-const isWinPlatform = Platform.OS === (('win32' as any) || 'windows');
+const isWinPlatform = Platform.OS === ('win32' as any) || Platform.OS === 'windows';
const filteredProps = isWinPlatform
? {}
: {
diff --git a/packages/components/Menu/src/MenuCallout/MenuCallout.android.tsx b/packages/components/Menu/src/MenuCallout/MenuCallout.android.tsx
index 42e8959d3f..d9f2f06d41 100644
--- a/packages/components/Menu/src/MenuCallout/MenuCallout.android.tsx
+++ b/packages/components/Menu/src/MenuCallout/MenuCallout.android.tsx
@@ -41,8 +41,8 @@ export const MenuCallout = stagedComponent((props: MenuCalloutProps) => {
},
]}
>
- {context.menuHeight + tokens.minPadding >= tokens.maxHeight ||
- context.menuHeight + tokens.minPadding >= mergedProps.maxHeight ? (
+ {context.menuHeight + tokens.minPadding >= (tokens.maxHeight as number) ||
+ context.menuHeight + tokens.minPadding >= (mergedProps.maxHeight as number) ? (
{children}
) : (
{children}
diff --git a/packages/components/Menu/src/MenuItemCheckbox/MenuItemCheckbox.tsx b/packages/components/Menu/src/MenuItemCheckbox/MenuItemCheckbox.tsx
index 2f734d2294..0bf5b2834b 100644
--- a/packages/components/Menu/src/MenuItemCheckbox/MenuItemCheckbox.tsx
+++ b/packages/components/Menu/src/MenuItemCheckbox/MenuItemCheckbox.tsx
@@ -3,7 +3,7 @@
import React from 'react';
import { Image, Platform, Pressable, View } from 'react-native';
-import type { Slots, UseSlots } from '@fluentui-react-native/framework';
+import type { Slots, UseSlots, FinalRender } from '@fluentui-react-native/framework';
import { compose, mergeProps, withSlots } from '@fluentui-react-native/framework';
import { IconV1 as Icon } from '@fluentui-react-native/icon';
import { TextV1 as Text } from '@fluentui-react-native/text';
@@ -43,8 +43,8 @@ export const MenuItemCheckbox = compose({
export const menuItemFinalRender = (
menuItem: MenuItemCheckboxInfo,
Slots: Slots,
-): React.FunctionComponent => {
- return (final: MenuItemCheckboxProps, children: React.ReactNode) => {
+): FinalRender => {
+ return (final: MenuItemCheckboxProps, ...children: React.ReactNode[]) => {
const { accessibilityLabel, icon, tooltip, ...mergedProps } = mergeProps(menuItem.props, final);
const checkmarkXml = `
diff --git a/packages/components/Menu/src/MenuItemRadio/MenuItemRadio.tsx b/packages/components/Menu/src/MenuItemRadio/MenuItemRadio.tsx
index b4d703aa00..415db4e644 100644
--- a/packages/components/Menu/src/MenuItemRadio/MenuItemRadio.tsx
+++ b/packages/components/Menu/src/MenuItemRadio/MenuItemRadio.tsx
@@ -3,7 +3,7 @@
import React from 'react';
import { Image, Platform, Pressable, View } from 'react-native';
-import type { Slots, UseSlots } from '@fluentui-react-native/framework';
+import type { Slots, UseSlots, FinalRender } from '@fluentui-react-native/framework';
import { compose, mergeProps, withSlots } from '@fluentui-react-native/framework';
import { IconV1 as Icon } from '@fluentui-react-native/icon';
import { TextV1 as Text } from '@fluentui-react-native/text';
@@ -39,8 +39,8 @@ export const MenuItemRadio = compose({
export const menuItemRadioFinalRender = (
menuItem: MenuItemRadioInfo,
Slots: Slots,
-): React.FunctionComponent => {
- return (final: MenuItemRadioProps, children: React.ReactNode) => {
+): FinalRender => {
+ return (final: MenuItemRadioProps, ...children: React.ReactNode[]) => {
const { accessibilityLabel, icon, tooltip, ...mergedProps } = mergeProps(menuItem.props, final);
const checkmarkXml = `
diff --git a/packages/components/Text/src/Text.tsx b/packages/components/Text/src/Text.tsx
index 00b5794c52..1456546244 100644
--- a/packages/components/Text/src/Text.tsx
+++ b/packages/components/Text/src/Text.tsx
@@ -117,15 +117,15 @@ export const Text = compressible((props: TextProps, useTo
};
}
- const isWinPlatform = Platform.OS === (('win32' as any) || 'windows');
+ const isWin32Platform = Platform.OS === ('win32' as any);
const filteredProps = {
- onKeyUp: isWinPlatform ? onKeyUp : undefined,
- keyUpEvents: isWinPlatform ? keyUpEvents : undefined,
+ onKeyUp: isWin32Platform ? onKeyUp : undefined,
+ keyUpEvents: isWin32Platform ? keyUpEvents : undefined,
validKeysUp: undefined,
- onKeyDown: isWinPlatform ? onKeyDown : undefined,
- keyDownEvents: isWinPlatform ? keyDownEvents : undefined,
+ onKeyDown: isWin32Platform ? onKeyDown : undefined,
+ keyDownEvents: isWin32Platform ? keyDownEvents : undefined,
validKeysDown: undefined,
- onAccessibilityTap: isWinPlatform ? onAccTap : undefined,
+ onAccessibilityTap: isWin32Platform ? onAccTap : undefined,
};
// return a continuation function that allows this text to be compressed
diff --git a/packages/deprecated/theming-react-native/package.json b/packages/deprecated/theming-react-native/package.json
index 085ef9db3c..96f0343ea7 100644
--- a/packages/deprecated/theming-react-native/package.json
+++ b/packages/deprecated/theming-react-native/package.json
@@ -52,8 +52,7 @@
"react": "18.2.0",
"react-native": "^0.74.0",
"react-native-macos": "^0.74.0",
- "react-native-windows": "^0.74.0",
- "typescript": "4.9.4"
+ "react-native-windows": "^0.74.0"
},
"peerDependencies": {
"@office-iss/react-native-win32": "^0.74.0",
diff --git a/packages/framework-base/src/component-patterns/render.types.ts b/packages/framework-base/src/component-patterns/render.types.ts
index 52589e6a01..815ad39250 100644
--- a/packages/framework-base/src/component-patterns/render.types.ts
+++ b/packages/framework-base/src/component-patterns/render.types.ts
@@ -50,9 +50,13 @@ export type LegacyDirectComponent = React.FunctionComponent & {
};
/**
- * Legacy type name used for consistency with old rendering patterns.
+ * Slot function type used in the composition framework. Slot functions return React elements (not arbitrary ReactNode values)
+ * since they always either call staged render functions or React.createElement.
*/
-export type SlotFn = LegacyDirectComponent;
+export type SlotFn = {
+ (props: TProps, ...children: React.ReactNode[]): React.ReactElement | null;
+ _canCompose?: boolean;
+};
/**
* MULTI-STAGE RENDERING
diff --git a/packages/framework/composition/src/composeFactory.ts b/packages/framework/composition/src/composeFactory.ts
index 6a0b78c011..c7fc4c32dc 100644
--- a/packages/framework/composition/src/composeFactory.ts
+++ b/packages/framework/composition/src/composeFactory.ts
@@ -1,6 +1,6 @@
import type { MergeOptions } from '@fluentui-react-native/framework-base';
import { immutableMergeCore } from '@fluentui-react-native/framework-base';
-import type { ComposableFunction } from '@fluentui-react-native/framework-base';
+import type { ComposableFunction, FinalRender } from '@fluentui-react-native/framework-base';
import { stagedComponent } from '@fluentui-react-native/framework-base';
import type { UseSlotOptions, Slots } from '@fluentui-react-native/use-slots';
import { buildUseSlots } from '@fluentui-react-native/use-slots';
@@ -25,7 +25,7 @@ export type ComposeFactoryOptions) => React.FunctionComponent;
+ useRender: (props: TProps, useSlots: UseStyledSlots) => FinalRender;
/**
* optional statics to attach to the component
diff --git a/packages/framework/eslint-config-rules/tsconfig.json b/packages/framework/eslint-config-rules/tsconfig.json
index d1242b336d..b973060012 100644
--- a/packages/framework/eslint-config-rules/tsconfig.json
+++ b/packages/framework/eslint-config-rules/tsconfig.json
@@ -5,5 +5,6 @@
"checkJs": true,
"noEmit": true
},
- "include": ["eslint.config.js"]
+ "include": ["eslint.config.js"],
+ "exclude": []
}
diff --git a/packages/framework/use-slot/src/useSlot.ts b/packages/framework/use-slot/src/useSlot.ts
index 8ecfaad8db..d473437ac0 100644
--- a/packages/framework/use-slot/src/useSlot.ts
+++ b/packages/framework/use-slot/src/useSlot.ts
@@ -2,7 +2,7 @@ import * as React from 'react';
import { mergeProps } from '@fluentui-react-native/framework-base';
-import type { SlotFn, NativeReactType } from '@fluentui-react-native/framework-base';
+import type { SlotFn, NativeReactType, FinalRender } from '@fluentui-react-native/framework-base';
import type { ComposableFunction, StagedRender } from '@fluentui-react-native/framework-base';
/**
@@ -27,9 +27,9 @@ export function useSlot(
component: NativeReactType | ComposableFunction,
props: TProps,
filter?: (propName: string) => boolean,
-): React.FunctionComponent {
+): SlotFn {
// some types to make things cleaner
- type ResultHolder = { result: React.FunctionComponent | TProps };
+ type ResultHolder = { result: FinalRender | TProps };
type MemoTuple = [SlotFn, ResultHolder];
// extract the staged component function if that pattern is being used, will be undefined if it is a standard component
@@ -54,8 +54,9 @@ export function useSlot(
}
// now if result was a function then call it directly, if not go through the standard React.createElement process
+ // Type assertion is safe here because result is either FinalRender (from stagedComponent) or TProps (props object)
return typeof result === 'function'
- ? (result as React.FunctionComponent)(props, ...children)
+ ? (result as FinalRender)(props, ...children)
: React.createElement(component, props, ...children);
};
// mark the slotFn so that withSlots knows to handle it differently
diff --git a/packages/libraries/core/tsconfig.json b/packages/libraries/core/tsconfig.json
index 555ee5da3d..a9d3e78c42 100644
--- a/packages/libraries/core/tsconfig.json
+++ b/packages/libraries/core/tsconfig.json
@@ -11,8 +11,7 @@
"noEmitOnError": true,
"skipLibCheck": true,
"noUnusedLocals": true,
- "strict": true,
- "suppressImplicitAnyIndexErrors": true
+ "strict": true
},
"include": ["src"]
}
diff --git a/scripts/src/tasks/build.js b/scripts/src/tasks/build.js
index 1b876d5811..145b9ad91f 100644
--- a/scripts/src/tasks/build.js
+++ b/scripts/src/tasks/build.js
@@ -104,6 +104,15 @@ function getBuildTargets(cwd = process.cwd()) {
async function buildTarget(target, cwd) {
const { module, outDir } = target;
const extraArgs = ['--outDir', outDir, '--module', module];
+
+ // TypeScript 5.8+ requires moduleResolution to match module when using Node16
+ // Set moduleResolution to match the module setting
+ if (module === 'node16') {
+ extraArgs.push('--moduleResolution', 'node16');
+ } else if (module === 'esnext') {
+ extraArgs.push('--moduleResolution', 'bundler');
+ }
+
const result = await runScript('tsc', ...extraArgs);
if (result !== 0) {
diff --git a/tester_deps/package.json b/tester_deps/package.json
index fdcc431ddd..0b8c5523ad 100644
--- a/tester_deps/package.json
+++ b/tester_deps/package.json
@@ -23,7 +23,7 @@
"@wdio/spec-reporter": "^9.12.6",
"appium": "^2.11.2",
"appium-windows-driver": "^2.12.18",
- "typescript": "^4.9.4",
+ "typescript": "^5.8.0",
"webdriverio": "^9.12.6"
},
"resolutions": {
diff --git a/yarn.lock b/yarn.lock
index fb8a086641..e189c17953 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3261,7 +3261,6 @@ __metadata:
react-native-windows: "npm:^0.74.0"
rimraf: "npm:^5.0.1"
ts-node: "npm:^10.7.0"
- typescript: "npm:^5.8.0"
webdriverio: "catalog:"
languageName: unknown
linkType: soft
@@ -4428,7 +4427,7 @@ __metadata:
prettier: "npm:^2.4.1"
react: "npm:18.2.0"
react-native: "npm:^0.74.0"
- typescript: "npm:^4.9.4"
+ typescript: "npm:^5.8.0"
languageName: unknown
linkType: soft
@@ -4733,7 +4732,6 @@ __metadata:
react-native-svg-transformer: "npm:^1.0.0"
react-test-renderer: "npm:18.2.0"
rimraf: "npm:^5.0.1"
- typescript: "npm:4.9.4"
peerDependencies:
"@office-iss/react-native-win32": ^0.74.0
peerDependenciesMeta:
@@ -4836,7 +4834,6 @@ __metadata:
react-native-test-app: "npm:^3.9.2"
react-native-windows: "npm:^0.74.0"
react-test-renderer: "npm:18.2.0"
- typescript: "npm:^5.8.0"
webdriverio: "catalog:"
peerDependenciesMeta:
"@office-iss/react-native-win32":
@@ -8523,7 +8520,6 @@ __metadata:
react-native: "npm:^0.74.0"
react-native-macos: "npm:^0.74.0"
react-native-windows: "npm:^0.74.0"
- typescript: "npm:4.9.4"
peerDependencies:
"@office-iss/react-native-win32": ^0.74.0
react: 18.2.0
@@ -21035,16 +21031,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:4.9.4":
- version: 4.9.4
- resolution: "typescript@npm:4.9.4"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10c0/5008b97a2a3afdbe57ea70e504ebc8ec98f18d888059dfb7932a41f566a1360a28afc8de2a440fd6143b4014cc6d2616079931dc690c7513c2d21fa53957e0ec
- languageName: node
- linkType: hard
-
"typescript@npm:>=4.7.0, typescript@npm:^5.8.0":
version: 5.8.3
resolution: "typescript@npm:5.8.3"
@@ -21055,16 +21041,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^4.9.4":
- version: 4.9.5
- resolution: "typescript@npm:4.9.5"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10c0/5f6cad2e728a8a063521328e612d7876e12f0d8a8390d3b3aaa452a6a65e24e9ac8ea22beb72a924fd96ea0a49ea63bb4e251fb922b12eedfb7f7a26475e5c56
- languageName: node
- linkType: hard
-
"typescript@npm:^5.8.3":
version: 5.9.3
resolution: "typescript@npm:5.9.3"
@@ -21075,16 +21051,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A4.9.4#optional!builtin":
- version: 4.9.4
- resolution: "typescript@patch:typescript@npm%3A4.9.4#optional!builtin::version=4.9.4&hash=289587"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10c0/d2949ccbf74e52ec8a153e5b2996439854e40937334b97374d4985c47465de1b63a611f15dc9bab9a8ae735fbedfabdf30f55e968778d890600f8472c286a08a
- languageName: node
- linkType: hard
-
"typescript@patch:typescript@npm%3A>=4.7.0#optional!builtin, typescript@patch:typescript@npm%3A^5.8.0#optional!builtin":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"
@@ -21095,16 +21061,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A^4.9.4#optional!builtin":
- version: 4.9.5
- resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10c0/e3333f887c6829dfe0ab6c1dbe0dd1e3e2aeb56c66460cb85c5440c566f900c833d370ca34eb47558c0c69e78ced4bfe09b8f4f98b6de7afed9b84b8d1dd06a1
- languageName: node
- linkType: hard
-
"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin":
version: 5.9.3
resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"