gpt4 book ai didi

typescript - 如何通过从具有值的对象中选取键来创建类型

转载 作者:行者123 更新时间:2023-12-04 14:51:25 25 4
gpt4 key购买 nike

所以我得到了这个大对象

const bigObject = {
propA: "sup",
propB: "hi",
propC: undefined,
propD: "",
propE: "hello",
propF: null,
}

我想创建一个类型,它是我的 bigObject 的键,但前提是该键有一个值:

// what I have so far which doesn't quite work
type LittleObject = {
[x in keyof typeof bigObject]: number
}

↑↑↑↑这个类型太放纵了。它塑造对象,因此它们的键可以是从 propApropF 的任何东西。我想要一个只允许 propAprobBpropE 的类型,因为它们具有真值。

最佳答案

您可以使用键重新映射来测试每个键的类型,然后有条件地将键设置为 never 以将其从生成的对象类型中删除。

const bigObject = {
propA: "sup",
propB: "hi",
propC: undefined,
propD: "",
propE: "hello",
propF: null,
} as const
// added as const so you can tell the difference so that
// "" does not get widened to string

type LittleObject = {
[
K in keyof typeof bigObject as
(typeof bigObject)[K] extends null | undefined | ""
? never
: K
]: number
}

Playground


诚然,这有点奇怪。在实践中,属性类型不太可能只是 undefined。通常是 undefined | something 这意味着您可能确实希望该 Prop 对其进行测试。但是很难根据您目前在问题中提供的内容给出具体建议。

关于typescript - 如何通过从具有值的对象中选取键来创建类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69020480/

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