TypeScriptforEach如何推断联合的类型并更改返回类型

我们想要获取一个文档类型并改变它的一些字段,然后返回具有新类型的新文档。我们想根据一组值(collectionDataFields在下面的示例中)来确定要改变的字段。

type AllDocuments = {
    __typename: 'cat'
    a: '123',
    b: '123',
    z: 'xyz'
} | {
    __typename: 'dog'
    a: '123',
    c: '123',
    z: 'xyz'
}

const collectionDateFields = {
    cat: ['a', 'b'],
    dog: ['a', 'c']
} as const

export const useStringsToNums = (document: AllDocuments) => {
  const dateFields = collectionDateFields[document.__typename]

  dateFields.forEach((field) => {
    document[field] = parseInt(document[field])
  })
  return document
}

在示例中,dateFields输入为,readonly ["a", "b"] | readonly ["a", "c"]但个人输入fieldany

document返回的AllDocuments,虽然我们希望它有改变的类型的字段(如一个连number)。

TS 游乐场示例

编辑:对于用法的一个例子,我会做这样的事情:

useStringsToNums({
    __typename: 'cat'
    a: '123',
    b: '123',
    z: 'xyz'
})

在这种情况下,该函数将匹配的属性__typename: 'cat'转换为数字(带有parseInt)。

以上是TypeScriptforEach如何推断联合的类型并更改返回类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>