const {name, surename} = formData
?console.log(name.value, surename.value)
Property 'value' does not exist on type 'string'. Did you mean 'valueOf'?
HTMLInputElement
или сделать предварительную проверку, но я пока не смог найти на чтоconst {name, surename}: {name: HTMLInputElement, surename: HTMLInputElement} = formData
Property 'surename' is missing in type 'HTMLFormElement' but required in type '{ name: HTMLInputElement; surename: HTMLInputElement; }'.
const form = useRef<HTMLFormElement | null>(null)
function handleSubmit(event: FormEvent) {
event.preventDefault()
const formData = form.current
if(!formData) return
const {name, surename} = formData
console.log(name.value, surename.value)
}
return(
<>
<form ref={form} className={style.form} onSubmit={handleSubmit}>
<input name="name" type="text" />
<input name="surename" type="text" />
<input type="submit" value="Add user" />
</form>
</>
)
const {name, surename} = formData as any
as unknown as Form
?interface Form {
name: HTMLInputElement,
surename: HTMLInputElement,
}
const {name, surename} = formData as unknown as Form
data[input] - string или boolean(string & boolean = never), а присваивать never ничего нельзя, даже any
never
, думал он служит только для того, чтобы описать функцию, которая вернет ошибку throw new Error()
и по этому она never
будетnever
, но в описании про него не нашел или не заметил подобный случай его использованияstring | boolean
это never
?WHERE
и если там только поле name="user", то он будет производит поиск с учетом созданного индекса, где мы реализовали CREATE INDEX name_idx ON products (name)
, а если у нас в условиях поиск по (name, brand, price), то уже будет использовать CREATE INDEX prod_idx ON products (name, brand, price)
, верно? [
completed - true, user_id - 1, id: 5
completed - true, user_id - 1, id: 7
completed - true, user_id - 1, id: 24
completed - true, user_id - 2, id: 8
completed - true, user_id - 4, id: 12
completed - false, user_id - 1, id: 13
completed - false, user_id - 1, id: 15
completed - true, user_id - 4, id: 27
]
SELECT * from todos GROUP BY user_id;
ERROR: column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT * from todos GROUP BY user_id;
SELECT * from todos GROUP BY id;
SELECT * from todos GROUP BY user_id, completed;
ERROR: column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT * from todos GROUP BY user_id, completed;
[
completed - true, user_id - 1, id: 5
completed - true, user_id - 1, id: 7
completed - true, user_id - 1, id: 24
completed - true, user_id - 2, id: 8
completed - true, user_id - 4, id: 12
completed - false, user_id - 1, id: 13
completed - false, user_id - 1, id: 15
completed - true, user_id - 4, id: 27
]
formData
это просто название, я не имел в виду объектFormData
)А как правильней работать?
У нас есть реф на форму
const form = useRef<HTMLFormElement | null>(null)
Есть сама форма
И в обработке формы хотим получить наши поля
const {name, surename} = formFields
Но без типизации он нам не позволяет их получить
И пришел к решению
Подскажи, как правильней это сделать?
Потому что пока мое лучше решение в плане деструктуризации это привести все к такой форме через
as unknown as Form
Возможно как-то динамический получить имена всех полей из нашего рефа?
const form = useRef<HTMLFormElement | null>(null)
Что бы не описывать руками интерфейс