#typescript
#typescript
Вопрос:
Я пытаюсь создать тип для своих форм. Что-то вроде этого:
function getCiccio<Values extends Record<string, unknown> = Record<string, unknown>>({
defaultValue,
onSubmit
}: {
defaultValue: Values
onSubmit: (values: Values) => void
}): {
value: Values
onSubmit: (value: Values) => void
} {
return {
value: defaultValue,
onSubmit
}
}
const a = getCiccio({
defaultValue: { cane: 1 },
onSubmit: (a) => { // here a is typed
alert(1)
}
})
Я хотел бы, чтобы значение, зависящее от onSubmit
функции, мешало initialValue
объекту.
Возможно ли это?
Это то, что я делал до сих пор. Но для того, чтобы ввести a
onSubmit
функцию on, мне нужно вызвать функцию.
Я бы хотел иметь обычный интерфейс вывода.
Комментарии:
1. Под
initialValue
, вы имели в видуinitialValues
? Вы увеличите свои шансы получить ответ, если поделитесь минимальным воспроизводимым примером своего кода2. готово, я добавил пример
3. Я вообще не вижу переменной
initialValue
в вашем примере
Ответ №1:
Если вы определяете интерфейс:
interface Ciccio <T extends Record<string, unknown> = Record<string, unknown>> {
value: T
onSubmit( value: T ): void
}
Затем вы можете использовать этот интерфейс для автоматического ввода в onSubmit
функцию при определении нового объекта:
const newCiccio: Ciccio <{ cand: number }> = {
value: { cand: 1 },
onSubmit: function( arg ) {
// arg is typed here
}
}
Однако здесь важно указать тип при определении нового значения, если вы хотите, чтобы тип был более конкретным, чем общий и стандартный Record<string, unknown>
. Итак, если вам требуется, чтобы тип в onSubmit
функции выводился без указания его в качестве аргумента типа при указании интерфейса (т. Е. Если вы хотите заменить Ciccio <{ cand: number }>
на simply Ciccio
), я не верю, что это возможно без определения функции, как в вашем первоначальном подходе.
Комментарии:
1. да, я понимаю, что вы говорите. Мы пришли к тому же выводу!