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.

上述代码是否应该不起作用?如果可能的话,我如何修复它?

推荐答案

This is fixed in TypeScript Version 3.2. See Release Notes.


看起来还不支持泛型类型的spread,但GitHub存在一个问题:Microsoft/TypeScript#10727.

目前,你可以使用type assertion,比如@Jevgenicommented:

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);
}

Typescript相关问答推荐

如何使打包和拆包功能通用?

TypScript如何在 struct 上定义基元类型?

Angular 17 Select 错误core.mjs:6531错误错误:NG 05105:发现意外合成监听器@transformPanel.done

有没有一种方法可以在保持类型的可选状态的同时更改类型?

返回同时具有固定键和变量键的对象的函数的返回类型

数组文字中对象的从键开始枚举

如何按不能保证的功能过滤按键?

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

参数属性类型定义的REACT-RUTER-DOM中的加载器属性错误

在Typescript 中,有没有`index=unfined的速记?未定义:某个数组[索引]`?

Select 下拉菜单的占位符不起作用

MatTool提示在角垫工作台中不起作用

如何过滤文字中的类对象联合类型?

有没有办法防止类型交集绕过联合类型限制?

有没有办法在Zod中使用跨字段验证来判断其他字段,然后呈现条件

如何从上传文件中删除预览文件图标?

如何将对象的字符串文字属性用作同一对象中的键类型

覆盖高阶组件中的 prop 时的泛型推理

带有过滤键的 Typescript 映射类型

基于可选参数的动态类型泛型类型