谁能用 TypeScript 解释一下这个奇怪的推论?

问题描述 投票:0回答:1

我确信这是预期的行为,但对我来说它看起来违反直觉。鉴于以下代码片段,为什么

item
被推断为
{ a: number }
而不是
{ b: number }
?我期待着一种压倒一切的
Options & { activities: Array<{ b: number }>}

enter image description here

我发现用

options
替换
Omit<Options, 'activities'> & { activities: Array<{ b: number }> }
参数类型可以解决问题,但我想了解为什么 TS 以这种方式工作以获得
Omit<>
的需要。

这是代码,您可以复制粘贴:

type Activity = { a: number };
type Options = { activities: Activity[] }

const fun = (options: Options & { activities: Array<{ b: number }> }) => {
    return options.activities.map(item => item.b)
}

我期待覆盖

activities
属性,因此它会得到
{ b: number }[]
类型。

javascript node.js typescript ecmascript-6 babeljs
1个回答
0
投票

&
运算符不是递归的,并且不会覆盖任何内容。

TypeScript 的目标是让代码变得更好而不是更差。

https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html#intersection-types

© www.soinside.com 2019 - 2024. All rights reserved.