diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/$$props.svelte b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/$$props.svelte
new file mode 100644
index 000000000..d04d2f55c
--- /dev/null
+++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/$$props.svelte
@@ -0,0 +1 @@
+
diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expected.json b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expected.json
new file mode 100644
index 000000000..fe51488c7
--- /dev/null
+++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expected.json
@@ -0,0 +1 @@
+[]
diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expectedv2.json b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expectedv2.json
new file mode 100644
index 000000000..fe51488c7
--- /dev/null
+++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/expectedv2.json
@@ -0,0 +1 @@
+[]
diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/input.svelte b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/input.svelte
new file mode 100644
index 000000000..db21b2304
--- /dev/null
+++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/$$props/input.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts b/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts
index 5c5288ab8..3fc3d9d79 100644
--- a/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts
+++ b/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts
@@ -114,7 +114,7 @@ export function createRenderFunction({
'}';
const returnString =
- `\nreturn { props: ${exportedNames.createPropsStr(isTsFile)}` +
+ `\nreturn { props: ${exportedNames.createPropsStr(isTsFile, uses$$props)}` +
`, slots: ${slotsAsDef}` +
`, events: ${events.toDefString()} }}`;
diff --git a/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts b/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts
index 22ffdcfa3..880053a11 100644
--- a/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts
+++ b/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts
@@ -19,6 +19,9 @@ interface ExportedName {
}
export class ExportedNames {
+ /**
+ * Uses the $$Props type
+ */
public uses$$Props = false;
private exports = new Map();
private possibleExports = new Map<
@@ -321,8 +324,9 @@ export class ExportedNames {
* Creates a string from the collected props
*
* @param isTsFile Whether this is a TypeScript file or not.
+ * @param uses$$propsValue whether the file references the $$props variable
*/
- createPropsStr(isTsFile: boolean): string {
+ createPropsStr(isTsFile: boolean, uses$$propsValue: boolean): string {
const names = Array.from(this.exports.entries());
if (this.uses$$Props) {
@@ -352,7 +356,7 @@ export class ExportedNames {
);
}
- if (names.length === 0) {
+ if (names.length === 0 && !uses$$propsValue) {
// Necessary, because {} roughly equals to any
return isTsFile
? '{} as Record'
diff --git a/packages/svelte2tsx/test/sourcemaps/samples/reserved-variables/mappings.jsx b/packages/svelte2tsx/test/sourcemaps/samples/reserved-variables/mappings.jsx
index c5185be6e..861026a9f 100644
--- a/packages/svelte2tsx/test/sourcemaps/samples/reserved-variables/mappings.jsx
+++ b/packages/svelte2tsx/test/sourcemaps/samples/reserved-variables/mappings.jsx
@@ -51,7 +51,7 @@
{
{/if} [original] line 13
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
-return { props: /** @type {Record} */ ({}), slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expected.tsx
index 44277b2ab..19e716cf5 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expected.tsx
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expected.tsx
@@ -3,7 +3,7 @@
;
() => (<>
{$$props['name']}
>);
-return { props: {} as Record, slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expectedv2.ts
index 04c384810..20e3dd4df 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expectedv2.ts
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/ts-uses-$$props/expectedv2.ts
@@ -3,7 +3,7 @@
;
async () => {
{ svelteHTML.createElement("h1", {});$$props['name']; }};
-return { props: {} as Record, slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expected.tsx
index 5f4c95fcf..fa7b4642e 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expected.tsx
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expected.tsx
@@ -5,7 +5,7 @@
;
() => (<>{name}
>);
-return { props: /** @type {Record} */ ({}), slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expectedv2.ts
index 3f8b2e9ec..bfa09bb8c 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expectedv2.ts
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props-script/expectedv2.ts
@@ -5,7 +5,7 @@
;
async () => { { svelteHTML.createElement("h1", {});name; }
};
-return { props: /** @type {Record} */ ({}), slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
-}
\ No newline at end of file
+}
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expected.tsx
index 8028f58ac..117da66c5 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expected.tsx
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expected.tsx
@@ -1,7 +1,7 @@
///
<>>;function render() { let $$props = __sveltets_1_allPropsType();
<>{$$props['name']}
>
-return { props: /** @type {Record} */ ({}), slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expectedv2.ts
index 21f3398b2..bea1a9e6e 100644
--- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expectedv2.ts
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$props/expectedv2.ts
@@ -1,7 +1,7 @@
///
;function render() { let $$props = __sveltets_1_allPropsType();
async () => { { svelteHTML.createElement("h1", {});$$props['name']; }};
-return { props: /** @type {Record} */ ({}), slots: {}, events: {} }}
+return { props: {}, slots: {}, events: {} }}
export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
}
\ No newline at end of file