1. ホーム
  2. typescript

[解決済み】Typescript: スプレッド型はオブジェクト型からしか作成できない

2022-02-17 16:28:42

質問

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

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

githubにissueがあることは承知していますが、何が修正されて何が修正されていないのかがわからず、2695のopen issueがあるそうです。だから、ここに投稿しています。私は最新のTypescript 2.9.2を使っています。

上記のコードは動作しないのでしょうか?また、可能であればどのように修正すればよいでしょうか?

解決方法は?

TypeScript Version 3.2 で修正されました。参照 リリースノート .


汎用型での拡散はまだサポートされていないようですが、GitHubのissueにはそれに関するものがあります。 マイクロソフト/TypeScript#10727 .

今のところ タイプアサーション のように ジェフゲニ コメント :

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