gpt4 book ai didi

typescript - 如何区分 TypeScript 中的两种不同对象类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:31 25 4
gpt4 key购买 nike

假设我有以下代码:

function myFunction(x: { foo: number } | { bar: string }) {

如何编写一些代码来确定x 是第一种还是第二种类型?

我考虑过的事情:

  • 编写一个 x is MyType 函数来检查 foo 属性。是的,我可以这样做,但对于仅用作单个函数参数的类型来说,这似乎有点过分了。
  • if ((x as { foo: number}).foo) { 让 y = x as { foo: number } 。我可以这样做,但它违背了类型系统的意义。
  • 给他们一个共同的 type 属性。同样,对于仅用作一个函数的参数的类型来说,这似乎有点矫枉过正。

最佳答案

也是一种变通方法,但是您可以通过使用类型为never 的可选字段扩展现有类型来统一类型的字段,以便理论上每种类型具有联合中所有可能的字段:

{ foo: number, bar?: never } | { bar: string, foo?: never }

通过使超集类型包含所有字段,您可以运行类型检查,如:

type CompletelyDisjointed = { foo: number, bar?:never } | { foo?: never, bar: string };

function myFunction(x: CompletelyDisjointed): string | number {
if (typeof x.bar === 'string') {
return x.bar;
} else {
return x.foo;
}
}

关于typescript - 如何区分 TypeScript 中的两种不同对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736258/

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