見出し画像

【ワンピースで覚えるTypeScript】第22回 lookup型/keyof型(JavaScript学習者向け)

今回はTypeScriptのlookup型/keyof型について解説します。

どちらも重要な機能なので、使いこなせるにしよう


type Character = {
  name: string;
  //bounty: number;
  bounty: bigint;
}

function getBounty(num: Character["bounty"]){
  return `${num}ベリー`;
}
//同じことを2回書かなくて済む

//keyof型
type Character1 = {
  name: string;
  bounty: number;
}

type CharacterKeys = keyof Character1;
let key: CharacterKeys;// "name" | "bounty"
key = "name";
key = "bounty";
//key = "age";

//keyof型とtypeofの組み合わせ
const luffy = {
  name: "ルフィ",
  age: 19,
};
//オブジェクトの型を取得するには、typeofを使用
type LuffyType = typeof luffy;
//keyof型を使用して、このオブジェクトのプロパティ名を取得
type LuffyKeys = keyof LuffyType;
//プロパティ名を使用して、オブジェクトのプロパティにアクセス
const nameKey: LuffyKeys = "name";
const luffyName: string = luffy[nameKey];
console.log(luffyName);
/*typeofとkeyof型を組み合わせて使用すると、
  オブジェクトの型からプロパティ名を取得し、
  オブジェクトのプロパティにアクセスすることができる*/


//keyof型とジェネリクス(型引数をもつ関数)
const chopper = {
  name: "チョッパー",
  bounty: 1000,
};

type ChopperKeys = keyof typeof chopper;
//オブジェクトとプロパティ名を引数に取り、プロパティの型を返す
type PropertyType<T, K extends keyof T> = T[K];
//オブジェクトchopperの特定のプロパティに対して型を指定
const age: PropertyType<typeof chopper, "bounty"> = 17;
const devil_fruits: PropertyType<typeof chopper, "name"> = "ヒトヒトの実";
//const age1: PropertyType<typeof chopper, "height"> = 17;

//=>keyof型とジェネリックスを組み合わせて使用することで
//オブジェクト

いいなと思ったら応援しよう!