typeof 型演算子とは
typeof は変数から型を抽出する型演算子です。
例として以下のようなオブジェクトがあったとします。
const person = {
name: "John",
age: 26,
};
上記オブジェクトに対して typeof を使った型は次のような型になります。
type Person = typeof person;
type Person = {
name: string;
age: number;
};
keyof 型演算子とは
keyof はオブジェクトの型からプロパティ名を型として返す型演算子です。
例として以下のようなオブジェクトの型があったとします。
type Person = {
name: string;
age: number;
};
上記オブジェクトの型に対して keyof を使った型は次のような型になります。
type PersonKey = keyof Person;
type PersonKey = "name" | "age";
keyof typeof を同時に使う
keyof と typeof を同時に使えば、オブジェクトのプロパティ名から型を抽出できます。
const Book = {
title: "sample book",
price: 1000,
author: "Mike",
};
上記オブジェクトに対して keyof typeof を使った型は次のような型になります。
type BookKey = keyof typeof Book;
type BookKey = "title" | "price" | "author";
また、オブジェクトの末尾に as const を記述することで、オブジェクトの Value を型にすることができます。
(as const 記述することで、プロパティすべてを readonly で指定したものと同等の扱いになります。)
const Book = {
title: "sample book",
price: 1000,
author: "Mike",
} as const;
上記オブジェクトに対して BookValue の型は次にようになります。
type BookKey = keyof typeof Book;
type BookValue = (typeof Book)[BookKey];
type BookValue = "sample book" | 1000 | "Mike";