在TypeScript中使用yup
v0.32.8时,我们得到TS错误消息
类型为"Reference"的实参不能赋值给类型为"number | Reference"的形参。类型"Reference"不能赋值给类型"Reference"。类型'unknown'不能赋值给类型'number'.ts(2345)
当我们试图将Yup.ref()
函数与Yup.moreThan()
一起使用时,例如在这个不使用TypeScript的SO问题中。
为什么在使用TypeScript时会出现这个错误,我们如何修复它?谢谢!
import * as Yup from 'yup';
const schema = Yup.object().shape({
minPrice: Yup
.number()
.positive('Must be positive')
.integer('Must be an integer')
.required('Required'),
maxPrice: Yup
.number()
.positive('Must be positive')
.integer('Must be an integer')
.moreThan(Yup.ref('minPrice')) // <- ERROR HERE!
.required('Required'),
})
更新:
改变
maxPrice: Yup
.number()
.positive('Must be positive')
.integer('Must be an integer')
.moreThan(Yup.ref<number>('minPrice'))
.required('Required'),
导致错误
类型为"Reference"的实参不能赋值给类型为"number | Reference"的形参。类型"Reference"不能赋值给类型"Reference"。类型'unknown'不能赋值给类型'number'。TS2345
您可以为Yup.ref
提供泛型类型。默认为unknown,因为moreThan
期望Reference<number>
而导致错误。
import * as Yup from 'yup';
const schema = Yup.object().shape({
minPrice: Yup
.number()
.positive('Must be positive')
.integer('Must be an integer')
.required('Required'),
maxPrice: Yup
.number()
.positive('Must be positive')
.integer('Must be an integer')
.moreThan(Yup.ref<number>('minPrice'))
.required('Required'),
})
Update:这需要一个尚未发布的yup新版本。在它发布之前,您可以使用:
moreThan(Yup.ref<number>('minPrice') as Reference<number>)