首页 > 解决方案 > 打字稿:传播类型只能从对象类型创建

问题描述

function foo<T extends object>(t: T): T {

  return {
    ...t // Error: [ts] Spread types may only be created from object types.
  }
}

我知道 github 上存在问题,但我无法弄清楚哪些已修复,哪些未修复,他们有 2695 个未解决的问题。所以我在这里发帖。我正在使用最新的 Typescript 2.9.2。

上面的代码不应该工作吗?如果可能的话,我该如何解决?

标签: typescript

解决方案


这在 TypeScript 3.2 版中已修复。请参阅发行说明


看起来尚不支持使用泛型类型进行传播,但有一个关于它的 GitHub 问题:Microsoft/TypeScript#10727

现在,您可以使用类型断言,如@Jevgeni 评论

function foo<T extends object>(t: T): T {
  return { ...(t as object) } as T;
}

或者您可以使用Object.assign具有正确类型定义的哪个。

function foo<T extends object>(t: T): T {
  return Object.assign({}, t);
}

推荐阅读