如何提取对象的部分属性键作为联合类型?
How to extract part of the properties' keys of an object as a union type?
在 Typescript 中,我想执行以下操作:
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = Extract<keyof MY_OBJECT, "fooA" | "fooB" | "fooC">
我希望 Typescript 能够“知道”keyof MY_OBJECT
上没有可用的 "fooC"
并警告我。
换句话说,我想提取一个对象和一个联合类型的部分属性,并且我想将它们全部保留为强类型。
例如,如果我在 MY_OBJECT
上将 fooA
更改为 fooAAA
,我想立即知道我需要修复 Extract<>
类型,因为 fooA
将不再存在。
可能吗?
我的用例: 我有一个 Redux 操作,应该更新特定对象的某些属性。因此,我将使用该联合类型(由选定的 属性 名称组成)来键入我的操作并确保该操作仅接收允许的名称。
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = Extract<keyof MY_OBJECT, "fooA" | "fooB">
type UPDATE_SOME_PROPS = PayloadAction<{ name: SOME_PROPS , value: SOME_VALUE }>
这是我最后做的事情:
我正在使用 keyof Pick<>
。通过这种方式,您可以获得提取属性的智能感知。
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = keyof Pick<MY_OBJECT, "fooA" | "fooB">
type SOME_PROPS_TEST = keyof Pick<MY_OBJECT, "fooA" | "fooB" | "fooC">
type SOME_PROPS = keyof Pick<MY_OBJECT, "fooA" | "fooB"> // WORKS
type SOME_PROPS_TEST = keyof Pick<MY_OBJECT, "fooA" | "fooB" | "fooC"> // TRIGGERS ERROR
在 Typescript 中,我想执行以下操作:
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = Extract<keyof MY_OBJECT, "fooA" | "fooB" | "fooC">
我希望 Typescript 能够“知道”keyof MY_OBJECT
上没有可用的 "fooC"
并警告我。
换句话说,我想提取一个对象和一个联合类型的部分属性,并且我想将它们全部保留为强类型。
例如,如果我在 MY_OBJECT
上将 fooA
更改为 fooAAA
,我想立即知道我需要修复 Extract<>
类型,因为 fooA
将不再存在。
可能吗?
我的用例: 我有一个 Redux 操作,应该更新特定对象的某些属性。因此,我将使用该联合类型(由选定的 属性 名称组成)来键入我的操作并确保该操作仅接收允许的名称。
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = Extract<keyof MY_OBJECT, "fooA" | "fooB">
type UPDATE_SOME_PROPS = PayloadAction<{ name: SOME_PROPS , value: SOME_VALUE }>
这是我最后做的事情:
我正在使用 keyof Pick<>
。通过这种方式,您可以获得提取属性的智能感知。
type MY_OBJECT = {
fooA: string,
fooB: string,
fooD: string,
fooE: string,
fooF: string
}
type SOME_PROPS = keyof Pick<MY_OBJECT, "fooA" | "fooB">
type SOME_PROPS_TEST = keyof Pick<MY_OBJECT, "fooA" | "fooB" | "fooC">
type SOME_PROPS = keyof Pick<MY_OBJECT, "fooA" | "fooB"> // WORKS
type SOME_PROPS_TEST = keyof Pick<MY_OBJECT, "fooA" | "fooB" | "fooC"> // TRIGGERS ERROR