Skip to content

Commit

Permalink
(fix) type error for component with no props (#1744)
Browse files Browse the repository at this point in the history
#1739
This is necessary because {} is roughly equal to the any type. It worked before because JSX makes an exception for this on components.
  • Loading branch information
dummdidumm committed Nov 29, 2022
1 parent 3a4c838 commit 67a6ed8
Show file tree
Hide file tree
Showing 248 changed files with 295 additions and 263 deletions.
Expand Up @@ -12,8 +12,19 @@
},
{
"range": {
"start": { "line": 40, "character": 0 },
"end": { "line": 40, "character": 49 }
"start": { "line": 37, "character": 10 },
"end": { "line": 37, "character": 25 }
},
"severity": 1,
"source": "ts",
"message": "Type 'boolean' is not assignable to type 'never'.",
"code": 2322,
"tags": []
},
{
"range": {
"start": { "line": 41, "character": 0 },
"end": { "line": 41, "character": 49 }
},
"severity": 1,
"source": "ts",
Expand All @@ -23,8 +34,8 @@
},
{
"range": {
"start": { "line": 40, "character": 1 },
"end": { "line": 40, "character": 11 }
"start": { "line": 41, "character": 1 },
"end": { "line": 41, "character": 11 }
},
"severity": 1,
"source": "ts",
Expand All @@ -34,8 +45,8 @@
},
{
"range": {
"start": { "line": 40, "character": 48 },
"end": { "line": 40, "character": 48 }
"start": { "line": 41, "character": 48 },
"end": { "line": 41, "character": 48 }
},
"severity": 1,
"source": "ts",
Expand All @@ -45,8 +56,8 @@
},
{
"range": {
"start": { "line": 40, "character": 24 },
"end": { "line": 42, "character": 12 }
"start": { "line": 41, "character": 24 },
"end": { "line": 43, "character": 12 }
},
"severity": 1,
"source": "ts",
Expand Down
Expand Up @@ -12,8 +12,19 @@
},
{
"range": {
"start": { "line": 37, "character": 24 },
"end": { "line": 37, "character": 34 }
"start": { "line": 37, "character": 10 },
"end": { "line": 37, "character": 25 }
},
"severity": 1,
"source": "ts",
"message": "Type 'boolean' is not assignable to type 'never'.",
"code": 2322,
"tags": []
},
{
"range": {
"start": { "line": 38, "character": 24 },
"end": { "line": 38, "character": 34 }
},
"severity": 1,
"source": "ts",
Expand All @@ -23,8 +34,8 @@
},
{
"range": {
"start": { "line": 40, "character": 1 },
"end": { "line": 40, "character": 11 }
"start": { "line": 41, "character": 1 },
"end": { "line": 41, "character": 11 }
},
"severity": 1,
"source": "ts",
Expand All @@ -34,8 +45,8 @@
},
{
"range": {
"start": { "line": 43, "character": 24 },
"end": { "line": 43, "character": 34 }
"start": { "line": 44, "character": 24 },
"end": { "line": 44, "character": 34 }
},
"severity": 1,
"source": "ts",
Expand Down
Expand Up @@ -35,6 +35,7 @@

<!-- invalid -->
<DoesntWork />
<Imported propDoesntExist={true} />
<svelte:component this={DoesntWork} />

<!-- invalid, no additional errors for new transformation (everything else is any) -->
Expand Down
13 changes: 9 additions & 4 deletions packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts
Expand Up @@ -346,13 +346,18 @@ export class ExportedNames {
);
}

if (names.length === 0) {
// Necessary, because {} roughly equals to any
return isTsFile
? '{} as Record<string, never>'
: '/** @type {Record<string, never>} */ ({})';
}

const dontAddTypeDef =
!isTsFile ||
names.length === 0 ||
names.every(([_, value]) => !value.type && value.required);
!isTsFile || names.every(([_, value]) => !value.type && value.required);
const returnElements = this.createReturnElements(names, dontAddTypeDef);
if (dontAddTypeDef) {
// No exports or only `typeof` exports -> omit the `as {...}` completely.
// Only `typeof` exports -> omit the `as {...}` completely.
// If not TS, omit the types to not have a "cannot use types in jsx" error.
return `{${returnElements.join(' , ')}}`;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/svelte2tsx/svelte-shims.d.ts
Expand Up @@ -102,7 +102,7 @@ type SvelteAnimationReturnType = {

type SvelteWithOptionalProps<Props, Keys extends keyof Props> = Omit<Props, Keys> & Partial<Pick<Props, Keys>>;
type SvelteAllProps = { [index: string]: any }
type SveltePropsAnyFallback<Props> = {[K in keyof Props]: Props[K] extends undefined ? any : Props[K]}
type SveltePropsAnyFallback<Props> = {[K in keyof Props]: Props[K] extends never ? never : Props[K] extends undefined ? any : Props[K]}
type SvelteSlotsAnyFallback<Slots> = {[K in keyof Slots]: {[S in keyof Slots[K]]: Slots[K][S] extends undefined ? any : Slots[K][S]}}
type SvelteRestProps = { [index: string]: any }
type SvelteSlots = { [index: string]: any }
Expand Down
@@ -1,7 +1,9 @@
/** @typedef {typeof __propDef.props} TestNoScriptProps */
/** @typedef {typeof __propDef.events} TestNoScriptEvents */
/** @typedef {typeof __propDef.slots} TestNoScriptSlots */
export default class TestNoScript extends SvelteComponentTyped<{}, {
export default class TestNoScript extends SvelteComponentTyped<{
[x: string]: never;
}, {
click: MouseEvent;
} & {
[evt: string]: CustomEvent<any>;
Expand All @@ -14,7 +16,9 @@ export type TestNoScriptEvents = typeof __propDef.events;
export type TestNoScriptSlots = typeof __propDef.slots;
import { SvelteComponentTyped } from "svelte";
declare const __propDef: {
props: {};
props: {
[x: string]: never;
};
events: {
click: MouseEvent;
} & {
Expand Down
Expand Up @@ -67,7 +67,7 @@
/></>↲ [generated] line 24
/> [original] line 22
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -58,7 +58,7 @@
{
{/await} [original] line 13
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -37,7 +37,7 @@
/></>↲ [generated] line 19
/> [original] line 17
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -98,7 +98,7 @@
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
<p>No tasks today!</p>
</>
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -57,7 +57,7 @@
/></>↲ [generated] line 27
/> [original] line 25
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -15,7 +15,7 @@
<button•on: ={$check•?•method1•:•method2}•>Bla</button>
<button•on:click={$check•?•method1•:•method2}•>Bla</button> [original] line 2
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -55,7 +55,7 @@
{
{/if} [original] line 13
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -24,7 +24,7 @@
</script> [original] line 4
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
() => (<></>);
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -24,7 +24,7 @@
</script> [original] line 3
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
() => (<></>);
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -7,7 +7,7 @@
<button• {count}>button</button>
<button•{count}>button</button> [original] line 1
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -51,7 +51,7 @@
{
{/if} [original] line 13
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial_with_any(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -7,7 +7,7 @@
<h1>Hello•World</h1>
<h1>Hello•World</h1> [original] line 1
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -17,7 +17,7 @@
</Component>
</Component> [original] line 3
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -36,7 +36,7 @@
</slot></>↲ [generated] line 14
</slot> [original] line 11
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
return { props: {}, slots: {'default': {}, 'foo': {}, 'bar': {foo:foo, baz:baz}}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {'default': {}, 'foo': {}, 'bar': {foo:foo, baz:baz}}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -17,7 +17,7 @@
{...__sveltets_1_ensureAnimation($animateStore(__sveltets_1_mapElementTag('div'),__sveltets_1_AnimationMove,{}))}
>
</div></>);
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -11,7 +11,7 @@ async () => {

{const $$action_0 = __sveltets_2_ensureAction($actionStore(svelteHTML.mapElementTag('div')));{ svelteHTML.createElement("div", __sveltets_2_union($$action_0), { });__sveltets_2_ensureTransition($transitionStore(svelteHTML.mapElementTag('div'),({ y: 100 })));__sveltets_2_ensureTransition($inStore(svelteHTML.mapElementTag('div')));__sveltets_2_ensureTransition($outStore(svelteHTML.mapElementTag('div')));__sveltets_2_ensureAnimation($animateStore(svelteHTML.mapElementTag('div'),__sveltets_2_AnimationMove));
}}};
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -23,7 +23,7 @@
$store.b = false;
;
() => (<></>);
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -23,7 +23,7 @@
$store.b = false;
;
async () => {};
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -3,7 +3,7 @@
<>{someRecordOrArr[$store]}
{someObject['$store']}
{someObject.$store}</>
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -3,7 +3,7 @@
async () => {someRecordOrArr[$store];
someObject['$store'];
someObject.$store;};
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -27,7 +27,7 @@
$store1
;
() => (<></>);
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -27,7 +27,7 @@
$store1
;
async () => {};
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}
Expand Up @@ -7,7 +7,7 @@

{$store1}
{$store2}</>
return { props: {}, slots: {}, events: {} }}
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
}

0 comments on commit 67a6ed8

Please sign in to comment.