Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions pages/#20.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*====================================================

【TypeScript入門 #20】Genericsの型引数が複数あるパターンやLookup Typesとの併用について解説!Genericsが使われているシーンも紹介!

====================================================*/
/*====================================================

複数の型引数を持つGenerics

====================================================*/

// const foo = <T extends string, K extends number, U = boolean>(
// foo: T,
// bar: K,
// baz: U
// ) => {
// return {};
// };

/*====================================================

Lookup Typesとは

====================================================*/

// type Obj = {
// a: string;
// b: boolean;
// };

// type Foo = Obj["a"];

/*====================================================

Lookup TypesとGenericsの組み合わせ

====================================================*/

// const getProperty = <T, K extends keyof T>(obj: T, key: K) => {
// return obj[key];
// };

// const setProperty = <T, K extends keyof T>(obj: T, key: K, value: T[K]) => {
// obj[key] = value;
// };

// const obj = {
// foo: 1,
// bar: 2,
// baz: 3,
// };

// const hoge = getProperty(obj, "baz");

// setProperty(obj, "bar", 11);

/*====================================================

JSメソッドで用いられるGenerics

====================================================*/

// const foo = [1, 2, 3].map<string>((v) => v.toString());