Skip to content
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ pnpm-lock.yaml

/regression-test/issues
/regression-test/workspace
/refs
/.devbox
12 changes: 6 additions & 6 deletions docs/tips/generates-type-from-object-property.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ type ConfirmationMessage =

## 今回の問題を解くにあたって

今回は今まで紹介してきたオブジェクトから型を作り出す方法と Mapped Types の合わせ技で再現することができます
今回は今まで紹介してきたオブジェクトから型を作り出す方法とインデックスアクセス型の合わせ技で再現することができます

[オブジェクトから型を生成する](generates-type-from-object.md)

[オブジェクトからキーの型を生成する](generates-type-from-object-key.md)

アプローチの方法としてはまずオブジェクトからキーの型を生成し Mapped Types を使いオブジェクトのプロパティの型を参照、それらをリテラル型で取得します。
アプローチの方法としてはまずオブジェクトからキーの型を生成し、インデックスアクセス型を使いオブジェクトのプロパティの型を参照、それらをリテラル型で取得します。

### キーの型を生成する

Expand All @@ -56,9 +56,9 @@ type Language = keyof typeof conf;
// ^?
```

### Mapped Types
### インデックスアクセス型

オブジェクトのプロパティの型を参照するために Mapped Types を使います。そのとき元のオブジェクトから型を生成するために`typeof`を使います。
オブジェクトのプロパティの型を参照するために[インデックスアクセス型](../reference/type-reuse/indexed-access-types.md)を使います。そのとき元のオブジェクトから型を生成するために`typeof`を使います。

```ts twoslash
const conf = {
Expand All @@ -74,7 +74,7 @@ type ConfirmationMessage = (typeof conf)[Language];
// ^?
```

### リテラル型を取得するできるようにする
### リテラル型を取得できるようにする

このままだとオブジェクトから型を生成すると同じように型はリテラル型ではありません。つまりただの`string`型のユニオン型つまり`string`型です。そこで、元のオブジェクト`conf`に`as const`をつけます。

Expand All @@ -90,7 +90,7 @@ const conf = {

## まとめ

お好みで定義したキーの型`Language`を Mapped Types のキーの部分に代入します。最終的な形は次のようになります。
お好みで定義したキーの型`Language`をインデックスアクセス型のブラケット内に指定します。最終的な形は次のようになります。

```ts twoslash
const conf = {
Expand Down
Loading