gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:09:43 27 4
gpt4 key购买 nike

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

type Person = {
name: string,
age: number,
married: boolean
}

type PersonValidationError = {
name?: string,
age?: string,
married?: string
}

在用户填写表单后构建 Person对象然后我想通过一些验证来运行它,如果有错误我想创建错误对象,该对象将在相应的属性中包含错误消息。有什么办法可以绑定(bind) PersonValidationErrorPerson键入自身,以便当我向 Person 添加更多属性时我不需要担心它们会不同步。

我的第一个想法是使用 keyof

type PersonValidationError = {
[prop: keyof Person]: string
}

但这是无效的并且keyof据我所知,不能用于索引签名。

我也知道 PersonValidationError它的所有属性都标记为可选,但如果我不能更改 Prop 的要求也没关系,因为我总是可以将它包装在 Partial<> 中。

最佳答案

使用 mapped type ;它看起来类似于索引签名,但它使用 in 关键字:

type PersonValidationError = { [K in keyof Person]?: string }

? 使属性可选。希望有所帮助;祝你好运!

Playground link to code

关于 typescript :如何创建类型的副本但更改属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62143738/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com