带有传播运算符的打字稿昆虫

Typescript insection with spread operator

我正在尝试做一些非常简单的事情:将类型化对象传递给函数,使用已知键对其进行扩充,然后 return 将两者相交的类型。

下面的代码似乎让我了解了大部分内容

interface Success {
  success: boolean
}

interface Named {
  name: string
}

type Resolver<T> = Success & T

function test<T>(input: T): Resolver<T> {
  return {
    success: true,
    ...input
  }
}

const person: Named = { name: 'Bob' };
const res = test<Named>(person);
// `res.success` and `res.name` are inferred

但是,我在 ...input 传播运算符上收到以下错误:

如何强制 T 成为对象?我已经尝试创建一个索引接口并对其进行扩展,但同样的错误仍然存​​在。

这是一个 TypeScript 错误。 将由 PR https://github.com/Microsoft/TypeScript/pull/13288

修复