Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript:如何创建类型的副本,但更改属性类型_Typescript_Types - Fatal编程技术网

Typescript:如何创建类型的副本,但更改属性类型

Typescript:如何创建类型的副本,但更改属性类型,typescript,types,Typescript,Types,我想为一个对象创建两种类型。对象本身的类型和验证错误的类型。这两种类型的属性名称相同,但属性的类型不同 type Person = { name: string, age: number, married: boolean } type PersonValidationError = { name?: string, age?: string, married?: string } 在用户填写表单构造Person对象后,我想对其进行一些验证,如果有错误,我想创建错误

我想为一个对象创建两种类型。对象本身的类型和验证错误的类型。这两种类型的属性名称相同,但属性的类型不同

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
的所有属性都标记为可选,但是如果我不能更改道具的要求,那么它就可以了,因为我总是可以用
部分
来包装它;它看起来类似于索引签名,但在
关键字中使用了

type PersonValidationError = { [K in keyof Person]?: string }
使属性成为可选属性。希望有帮助;祝你好运

使用a;它看起来类似于索引签名,但在
关键字中使用了

type PersonValidationError = { [K in keyof Person]?: string }
使属性成为可选属性。希望有帮助;祝你好运