Skip to content

Commit

Permalink
(fix) getter type is nonnullable (#1751)
Browse files Browse the repository at this point in the history
  • Loading branch information
dummdidumm committed Dec 1, 2022
1 parent 42bbb8b commit 17ce1d4
Show file tree
Hide file tree
Showing 26 changed files with 67 additions and 25 deletions.
@@ -0,0 +1,7 @@
<script>
export function test() {
return 1;
}
export class Foo {}
export const bar = true;
</script>
@@ -0,0 +1,10 @@
[
{
"range": { "start": { "line": 5, "character": 4 }, "end": { "line": 5, "character": 22 } },
"severity": 1,
"source": "ts",
"message": "This comparison appears to be unintentional because the types 'boolean' and 'string' have no overlap.",
"code": 2367,
"tags": []
}
]
@@ -0,0 +1,10 @@
[
{
"range": { "start": { "line": 5, "character": 4 }, "end": { "line": 5, "character": 22 } },
"severity": 1,
"source": "ts",
"message": "This comparison appears to be unintentional because the types 'boolean' and 'string' have no overlap.",
"code": 2367,
"tags": []
}
]
@@ -0,0 +1,8 @@
<script lang="ts">
import ComponentWithGetters from "./component-with-getters.svelte";
const comp: ComponentWithGetters = null as any;
comp.test();
new comp.Foo();
comp.bar === 'foo';
</script>

8 changes: 7 additions & 1 deletion packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts
Expand Up @@ -195,7 +195,13 @@ export class ExportedNames {

createClassGetters(): string {
return Array.from(this.getters)
.map((name) => `\n get ${name}() { return this.$$prop_def.${name} }`)
.map(
(name) =>
// getters are const/classes/functions, which are always defined.
// We have to remove the `| undefined` from the type here because it was necessary to
// be added in a previous step so people are not expected to provide these as props.
`\n get ${name}() { return __sveltets_2_nonNullable(this.$$prop_def.${name}) }`
)
.join('');
}

Expand Down
1 change: 1 addition & 0 deletions packages/svelte2tsx/svelte-shims.d.ts
Expand Up @@ -231,6 +231,7 @@ declare function __sveltets_2_createComponentAny(props: Record<string, any>): _S
declare function __sveltets_2_any(...dummy: any[]): any;
declare function __sveltets_2_empty(...dummy: any[]): {};
declare function __sveltets_2_union<T1,T2,T3,T4,T5>(t1:T1,t2?:T2,t3?:T3,t4?:T4,t5?:T5): T1 & T2 & T3 & T4 & T5;
declare function __sveltets_2_nonNullable<T>(type: T): NonNullable<T>;

declare function __sveltets_2_cssProp(prop: Record<string, any>): {};

Expand Down
Expand Up @@ -7,5 +7,5 @@
return { props: {Foo: Foo}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['Foo'], __sveltets_1_with_any_event(render()))) {
get Foo() { return this.$$prop_def.Foo }
get Foo() { return __sveltets_2_nonNullable(this.$$prop_def.Foo) }
}
Expand Up @@ -7,5 +7,5 @@ async () => {};
return { props: {Foo: Foo}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['Foo'], __sveltets_1_with_any_event(render()))) {
get Foo() { return this.$$prop_def.Foo }
get Foo() { return __sveltets_2_nonNullable(this.$$prop_def.Foo) }
}
Expand Up @@ -16,5 +16,5 @@
return { props: {...__sveltets_1_ensureRightProps<{}>(__sveltets_1_any("") as $$Props), ...__sveltets_1_ensureRightProps<Partial<$$Props>>({}), ...{} as unknown as $$Props, ...{c: c} as {c?: typeof c}}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any_event(render())) {
get c() { return this.$$prop_def.c }
get c() { return __sveltets_2_nonNullable(this.$$prop_def.c) }
}
Expand Up @@ -16,5 +16,5 @@ $$props;};
return { props: {...__sveltets_1_ensureRightProps<{}>(__sveltets_1_any("") as $$Props), ...__sveltets_1_ensureRightProps<Partial<$$Props>>({}), ...{} as unknown as $$Props, ...{c: c} as {c?: typeof c}}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any_event(render())) {
get c() { return this.$$prop_def.c }
get c() { return __sveltets_2_nonNullable(this.$$prop_def.c) }
}
Expand Up @@ -37,5 +37,5 @@ export type InputEvents<A,B extends keyof A,C extends boolean> = ReturnType<__sv
export type InputSlots<A,B extends keyof A,C extends boolean> = ReturnType<__sveltets_Render<A,B,C>['slots']>;

export default class Input<A,B extends keyof A,C extends boolean> extends SvelteComponentTyped<InputProps<A,B,C>, InputEvents<A,B,C>, InputSlots<A,B,C>> {
get getA() { return this.$$prop_def.getA }
get getA() { return __sveltets_2_nonNullable(this.$$prop_def.getA) }
}
Expand Up @@ -37,5 +37,5 @@ export type InputEvents<A,B extends keyof A,C extends boolean> = ReturnType<__sv
export type InputSlots<A,B extends keyof A,C extends boolean> = ReturnType<__sveltets_Render<A,B,C>['slots']>;

export default class Input<A,B extends keyof A,C extends boolean> extends SvelteComponentTyped<InputProps<A,B,C>, InputEvents<A,B,C>, InputSlots<A,B,C>> {
get getA() { return this.$$prop_def.getA }
get getA() { return __sveltets_2_nonNullable(this.$$prop_def.getA) }
}
Expand Up @@ -38,5 +38,5 @@ class __sveltets_Render<A,B extends keyof A,C extends boolean> {


export default class Input__SvelteComponent_<A,B extends keyof A,C extends boolean> extends Svelte2TsxComponent<ReturnType<__sveltets_Render<A,B,C>['props']>, ReturnType<__sveltets_Render<A,B,C>['events']>, ReturnType<__sveltets_Render<A,B,C>['slots']>> {
get getA() { return this.$$prop_def.getA }
get getA() { return __sveltets_2_nonNullable(this.$$prop_def.getA) }
}
Expand Up @@ -38,5 +38,5 @@ class __sveltets_Render<A,B extends keyof A,C extends boolean> {


export default class Input__SvelteComponent_<A,B extends keyof A,C extends boolean> extends Svelte2TsxComponent<ReturnType<__sveltets_Render<A,B,C>['props']>, ReturnType<__sveltets_Render<A,B,C>['events']>, ReturnType<__sveltets_Render<A,B,C>['slots']>> {
get getA() { return this.$$prop_def.getA }
get getA() { return __sveltets_2_nonNullable(this.$$prop_def.getA) }
}
Expand Up @@ -8,7 +8,7 @@
return { props: {name: name , SOME: SOME , CONSTANT: CONSTANT} as {name?: string, SOME?: typeof SOME, CONSTANT?: typeof CONSTANT}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any_event(render())) {
get name() { return this.$$prop_def.name }
get SOME() { return this.$$prop_def.SOME }
get CONSTANT() { return this.$$prop_def.CONSTANT }
get name() { return __sveltets_2_nonNullable(this.$$prop_def.name) }
get SOME() { return __sveltets_2_nonNullable(this.$$prop_def.SOME) }
get CONSTANT() { return __sveltets_2_nonNullable(this.$$prop_def.CONSTANT) }
}
Expand Up @@ -8,7 +8,7 @@ async () => {};
return { props: {name: name , SOME: SOME , CONSTANT: CONSTANT} as {name?: string, SOME?: typeof SOME, CONSTANT?: typeof CONSTANT}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_with_any_event(render())) {
get name() { return this.$$prop_def.name }
get SOME() { return this.$$prop_def.SOME }
get CONSTANT() { return this.$$prop_def.CONSTANT }
get name() { return __sveltets_2_nonNullable(this.$$prop_def.name) }
get SOME() { return __sveltets_2_nonNullable(this.$$prop_def.SOME) }
get CONSTANT() { return __sveltets_2_nonNullable(this.$$prop_def.CONSTANT) }
}
Expand Up @@ -9,5 +9,5 @@
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}
Expand Up @@ -9,5 +9,5 @@ async () => { { svelteHTML.createElement("svelte:options", {});}
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}
Expand Up @@ -12,7 +12,7 @@
return { props: {foo: foo , foo2: foo2 , class: clazz , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','foo2','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
get foo() { return this.$$prop_def.foo }
/**accessor*/
set foo(_) {}
Expand Down
Expand Up @@ -12,7 +12,7 @@ async () => { { svelteHTML.createElement("svelte:options", {"accessors":true,})
return { props: {foo: foo , foo2: foo2 , class: clazz , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','foo2','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
get foo() { return this.$$prop_def.foo }
/**accessor*/
set foo(_) {}
Expand Down
Expand Up @@ -9,5 +9,5 @@
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}
Expand Up @@ -9,5 +9,5 @@ async () => { { svelteHTML.createElement("svelte:options", { "accessors":false,
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}
Expand Up @@ -12,7 +12,7 @@
return { props: {foo: foo , foo2: foo2 , class: clazz , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','foo2','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
get foo() { return this.$$prop_def.foo }
/**accessor*/
set foo(_) {}
Expand Down
Expand Up @@ -12,7 +12,7 @@ async () => { { svelteHTML.createElement("svelte:options", { "accessors":true,}
return { props: {foo: foo , foo2: foo2 , class: clazz , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','foo2','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
get foo() { return this.$$prop_def.foo }
/**accessor*/
set foo(_) {}
Expand Down
Expand Up @@ -8,5 +8,5 @@
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}
Expand Up @@ -8,5 +8,5 @@ async () => {};
return { props: {foo: foo , bar: bar}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(['foo','bar'], __sveltets_1_with_any_event(render()))) {
get bar() { return this.$$prop_def.bar }
get bar() { return __sveltets_2_nonNullable(this.$$prop_def.bar) }
}

0 comments on commit 17ce1d4

Please sign in to comment.