fix ts errors

This commit is contained in:
Hayden 2023-06-02 12:07:11 -08:00
parent 33413a86f7
commit 7d96bba1ee
No known key found for this signature in database
GPG key ID: 17CF79474E257545

View file

@ -75,6 +75,7 @@
toast.success("Item saved"); toast.success("Item saved");
navigateTo("/item/" + itemId.value); navigateTo("/item/" + itemId.value);
} }
type NoUndefinedField<T> = { [P in keyof T]-?: NoUndefinedField<NonNullable<T[P]>> };
type StringKeys<T> = { [k in keyof T]: T[k] extends string ? k : never }[keyof T]; type StringKeys<T> = { [k in keyof T]: T[k] extends string ? k : never }[keyof T];
type OnlyString<T> = { [k in StringKeys<T>]: string }; type OnlyString<T> = { [k in StringKeys<T>]: string };
@ -86,13 +87,13 @@
type: "text" | "textarea"; type: "text" | "textarea";
label: string; label: string;
// key of ItemOut where the value is a string // key of ItemOut where the value is a string
ref: keyof OnlyString<ItemOut>; ref: keyof OnlyString<NoUndefinedField<ItemOut>>;
}; };
type NumberFormField = { type NumberFormField = {
type: "number"; type: "number";
label: string; label: string;
ref: keyof OnlyNumber<ItemOut> | keyof OnlyString<ItemOut>; ref: keyof OnlyNumber<NoUndefinedField<ItemOut>> | keyof OnlyString<NoUndefinedField<ItemOut>>;
}; };
// https://stackoverflow.com/questions/50851263/how-do-i-require-a-keyof-to-be-for-a-property-of-a-specific-type // https://stackoverflow.com/questions/50851263/how-do-i-require-a-keyof-to-be-for-a-property-of-a-specific-type
@ -103,7 +104,7 @@
interface BoolFormField { interface BoolFormField {
type: "checkbox"; type: "checkbox";
label: string; label: string;
ref: keyof OnlyBoolean<ItemOut>; ref: keyof OnlyBoolean<NoUndefinedField<ItemOut>>;
} }
type DateKeys<T> = { [k in keyof T]: T[k] extends Date | string ? k : never }[keyof T]; type DateKeys<T> = { [k in keyof T]: T[k] extends Date | string ? k : never }[keyof T];
@ -112,7 +113,7 @@
type DateFormField = { type DateFormField = {
type: "date"; type: "date";
label: string; label: string;
ref: keyof OnlyDate<ItemOut>; ref: keyof OnlyDate<NoUndefinedField<ItemOut>>;
}; };
type FormField = TextFormField | BoolFormField | DateFormField | NumberFormField; type FormField = TextFormField | BoolFormField | DateFormField | NumberFormField;
@ -184,6 +185,7 @@
{ {
type: "date", type: "date",
label: "Purchase Date", label: "Purchase Date",
// @ts-expect-error - we know this is a date
ref: "purchaseTime", ref: "purchaseTime",
}, },
]; ];
@ -197,6 +199,7 @@
{ {
type: "date", type: "date",
label: "Warranty Expires", label: "Warranty Expires",
// @ts-expect-error - we know this is a date
ref: "warrantyExpires", ref: "warrantyExpires",
}, },
{ {
@ -220,6 +223,7 @@
{ {
type: "date", type: "date",
label: "Sold At", label: "Sold At",
// @ts-expect-error - we know this is a date
ref: "soldTime", ref: "soldTime",
}, },
]; ];