代码之家  ›  专栏  ›  技术社区  ›  methuselah

排列类型只能在Angular9/TypeScript 3.7.5更新后从对象类型错误创建

  •  0
  • methuselah  · 技术社区  · 6 年前
    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。

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

    0 回复  |  直到 8 年前
        1
  •  21
  •   Muhammad Mabrouk    6 年前

    这在TypeScript 3.2版中已修复。看到了吗 Release Notes .


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

    现在你可以用 type assertion 喜欢 @Jevgeni commented

    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);
    }
    
        2
  •  0
  •   Aathil Ahamed    6 年前

    您可以使用空的花括号{}或类似以下示例的界面:

    goodsArray.map(good => {
      return {
        id: good.payload.doc.id,
        ...good.payload.doc.data() as {}
      };
    });
    

    goodsArray.map(good => {
      return {
        id: good.payload.doc.id,
        ...good.payload.doc.data() as Goods // 'Goods' is my interface name
      };
    });
    
        3
  •  0
  •   Simon_Weaver    6 年前

    Typescript的3.2版修复了这个问题。改进排列和静止参数处理的两个pr是:

    你现在可以用 npm install typescript@3.2 .

    在3.2中,您的代码按原样工作。

    版本3.2已于2018年11月29日发布,您可以阅读更多信息 here .

    推荐文章