Fix inaccurate InputElementProps type for text/select fields (#14908)
authorShachar Zidon <theonlytails@theonlytails.com>
Thu, 20 Nov 2025 09:23:32 +0000 (11:23 +0200)
committerGitHub <noreply@github.com>
Thu, 20 Nov 2025 09:23:32 +0000 (10:23 +0100)
* Fix inaccurate InputElementProps type for text/select fields

* add another case for the multiple attribute

* format

* Merge branch 'main' into patch-2

* generate types

* Merge branch 'patch-2' of https://github.com/TheOnlyTails/kit into patch-2

* added changeset

* Merge branch 'main' into patch-2

.changeset/upset-tires-retire.md [new file with mode: 0644]
packages/kit/src/exports/public.d.ts
packages/kit/types/index.d.ts

diff --git a/.changeset/upset-tires-retire.md b/.changeset/upset-tires-retire.md
new file mode 100644 (file)
index 0000000..18cac46
--- /dev/null
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+fix: improved the accuracy of the types of the output of `field.as('...')`
index 3516689dce67248c1715089ce5d58ffc2e2b4674..39174438f805b887580e5ed4d25093486b23531c 100644 (file)
@@ -1865,13 +1865,28 @@ type InputElementProps<T extends keyof InputTypeMap> = T extends 'checkbox' | 'r
                                get files(): FileList | null;
                                set files(v: FileList | null);
                        }
-               : {
-                               name: string;
-                               type: T;
-                               'aria-invalid': boolean | 'false' | 'true' | undefined;
-                               get value(): string | number;
-                               set value(v: string | number);
-                       };
+               : T extends 'select' | 'select multiple'
+                       ? {
+                                       name: string;
+                                       multiple: T extends 'select' ? false : true;
+                                       'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                       get value(): string | number;
+                                       set value(v: string | number);
+                               }
+                       : T extends 'text'
+                               ? {
+                                               name: string;
+                                               'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                               get value(): string | number;
+                                               set value(v: string | number);
+                                       }
+                               : {
+                                               name: string;
+                                               type: T;
+                                               'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                               get value(): string | number;
+                                               set value(v: string | number);
+                                       };
 
 type RemoteFormFieldMethods<T> = {
        /** The values that will be submitted */
index 0ddf7ca088449646ca6461c351f23b17a92c0e77..548bc7a78d83addfb37cf145243c95425549b35d 100644 (file)
@@ -1841,13 +1841,28 @@ declare module '@sveltejs/kit' {
                                        get files(): FileList | null;
                                        set files(v: FileList | null);
                                }
-                       : {
-                                       name: string;
-                                       type: T;
-                                       'aria-invalid': boolean | 'false' | 'true' | undefined;
-                                       get value(): string | number;
-                                       set value(v: string | number);
-                               };
+                       : T extends 'select' | 'select multiple'
+                               ? {
+                                               name: string;
+                                               multiple: T extends 'select' ? false : true;
+                                               'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                               get value(): string | number;
+                                               set value(v: string | number);
+                                       }
+                               : T extends 'text'
+                                       ? {
+                                                       name: string;
+                                                       'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                                       get value(): string | number;
+                                                       set value(v: string | number);
+                                               }
+                                       : {
+                                                       name: string;
+                                                       type: T;
+                                                       'aria-invalid': boolean | 'false' | 'true' | undefined;
+                                                       get value(): string | number;
+                                                       set value(v: string | number);
+                                               };
 
        type RemoteFormFieldMethods<T> = {
                /** The values that will be submitted */