繁体   English   中英

如何将 object 的部分属性键提取为联合类型?

[英]How to extract part of the properties' keys of an object as a union type?

在 Typescript 中,我想做以下事情:

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" keyof MY_OBJECT警告我。

换句话说,我想提取 object 和联合类型的部分属性,并且我想保持它们都是强类型的。

例如,如果我在fooA上将MY_OBJECT fooAAA我想立即知道我需要修复该Extract<>类型的某些内容,因为fooA将不再存在。

可能吗?

我的用例:我有一个 Redux 操作,它应该更新特定 object 的一些属性。 因此,我将使用该联合类型(由选定的属性名称组成)来键入我的操作并确保该操作仅接收允许的名称。

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 }>

这是我最终做的事情:

Typescript 操场

我正在使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM