Open5
TypeScriptメモ

Type Challengesを解いたりする中で学んだことのメモ

インデックスアクセス型
type A = { foo: number };
type Foo = A["foo"];
// type Foo = number
type Person = { name: string; age: number };
type T = Person["name" | "age"];
// type T = string | number
type Foo = { a: number; b: string; c: boolean };
type T = Foo[keyof Foo];
// type T = string | number | boolean

ユーティリティ型 - Pick
type User = {
surname: string;
middleName?: string;
givenName: string;
age: number;
};
type Person = Pick<User, "givenName" | "age">;
/*
type Person = {
givenName: string;
age: number
};

Mapped Types
type SystemSupportLanguage = "en" | "fr" | "it" | "es";
type Butterfly = {
[key in SystemSupportLanguage]: string;
};
/*
type Butterfly = {
en: string
fr: string
it: string
es: string
}
Readonly<T>もこの機能で実現されている。
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};

Conditional Types
日本語では条件付き型、型の条件分岐、条件型などと呼ばれる。
type IsString<T> = T extends string ? true : false;
const a: IsString<"a"> = true;