【发布时间】:2021-07-04 18:55:25
【问题描述】:
我有以下界面可用。
interface User {
id: string
name: string
age: number
gender: Gender
hobbies: Hobby[]
addresses: Address[]
}
现在我想要一个包含所有 标量 字段的新类型:
interface UserScalars {
id: string
name: string
age: number
gender: Gender
}
我知道我可以在这里使用Omit/Exclude,但在我的情况下有很多 scalar 以及 no-scalars 所以Omit/Exclude 只会使我的代码更丑。
这在打字稿中可行吗?
【问题讨论】:
-
在为
type Scalar = string | number | Gender;之类的标量创建类型之后,Extract就是您想要的type UserScalars = Extract<User, Scalar>;和Omit是您想要的type UserNonScalars = Omit<User, Scalar>;。您如何让 TypeScript 知道什么是标量和非标量而不至少定义一个(我建议定义 Scalar,因为它的成员比 NonScalar 更不同)。 -
这是我所做的,但由于某种原因,最终类型,即
UserScalars是never类型。typescript type Scalars = string | number \n type UserScalars = Extract<CampaignDbObject, Scalars> \n let x: UserScalars -
啊,对不起,你想要的不是
Extract(这会从union中提取类型)或Omit(这会省略keys来自类型的属性)。你会想做类似下面回答的PickByValueType。 -
无论如何,非常感谢先生。
标签: typescript interface