我想为一个对象创建两种类型。对象本身的类型和验证错误的类型。这两种类型将具有相同的属性名称,但属性将具有不同的类型。
type Person = {
name: string,
age: number,
married: boolean
}
type PersonValidationError = {
name?: string,
age?: string,
married?: string
}
Run Code Online (Sandbox Code Playgroud)
在用户填写构建对象的表单后,Person我想通过一些验证来运行它,如果出现错误,我想创建错误对象,该对象将在相应的属性中包含错误消息。有没有一种方法可以将其PersonValidationError与Person类型本身联系起来,这样当我添加更多属性时,Person我就不必担心它们不同步。
我的第一个想法是使用keyof
type PersonValidationError = {
[prop: keyof Person]: string
}
Run Code Online (Sandbox Code Playgroud)
但据我了解,这是无效的,keyof不能在索引签名中使用。
我也知道PersonValidationError它的所有属性都标记为可选,但如果我无法更改道具的要求,那也没关系,因为我总是可以将其包装在Partial<>
jca*_*alz 13
使用映射类型;它看起来类似于索引签名,但它使用in关键字:
type PersonValidationError = { [K in keyof Person]?: string }
Run Code Online (Sandbox Code Playgroud)
这?使得属性可选。希望有帮助;祝你好运!