我想为一个对象创建2种类型。对象本身的类型和验证错误的类型。这两种类型将具有相同的属性名称,但属性将具有不同的类型。
var
❤ : string;
⅖ : double;
begin
❤ := 'My heart';
ShowMessage(❤);
⅖ := 0.4;
ShowMessage(⅖.ToString);
end;
用户填写构建type Person = {
name: string,
age: number,
married: boolean
}
type PersonValidationError = {
name?: string,
age?: string,
married?: string
}
对象的表单后,我想通过一些验证运行它,如果有错误,我要创建错误对象,该对象将在相应的属性中包含错误消息。有没有一种方法可以将Person
与PersonValidationError
类型本身联系在一起,这样当我向Person
添加更多属性时,我不必担心它们会不同步。
我的第一个想法是使用Person
keyof
但这无效,据我了解,type PersonValidationError = {
[prop: keyof Person]: string
}
不能用于索引签名。
我也知道keyof
的所有属性都标记为可选,但是如果我无法更改道具的要求,那就很好了,因为我总是可以将其包装在PersonValidationError
答案 0 :(得分:2)
使用mapped type;它看起来类似于索引签名,但是它使用in
关键字:
type PersonValidationError = { [K in keyof Person]?: string }
?
使属性成为可选。希望能有所帮助;祝你好运!