0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TypeScript】for (const key in obj) の型について

Posted at

はじめに

例えば、for (const key in obj) 内でのkeyの型などについて理解できていなかったのでまとめる。

結論

上記の例で言うと、key の型は「Extract<keyof T, string>」で、

objのkeyの文字列リテラルのユニオン型(String Literal Union) でかつ、string型のもの。という意味になる。

詳細

Extractとは

Extract<T,U>:T型のプロパティでU型に代入可能なプロパティのみを残した型を構築する。

keyofとは

keyof T:以下のようにオブジェクトのプロパティ名を抽出して 文字列リテラルのユニオン型(String Literal Union) を取得できる。

type Person = {
  name: string;
  old: number;
};

type Keys = keyof Person; // "name" | "old"

これがわかれば、以下のようなメソッドがあった場合にkeyに入り得るのは、”name”か”old”だけ、と理解できる。

function shallowCopy<T extends object>(obj: T): T {
  const result = {};
  for (const key in obj) {
    result[key] = obj[key];
  }
  return result;
}

const testObj = {
  name: "yamada",
  old: 15
}

shallowCopy<Person>(testObj)

おわりに

Extract などが絡んできて複雑そうに感じたが一つ一つ理解すれば、なにも問題なかった。

Extract<keyof T, string>という見た目が難しそうなだけで、内容は「for (const key in obj)とした場合のkeyはオブジェクトのkey一覧の中のどれか」という当たり前のことであった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?