From f4e6ac5ceacde9f912eb6829afea855e73f4771a Mon Sep 17 00:00:00 2001 From: suin Date: Fri, 22 May 2026 19:51:41 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3?= =?UTF-8?q?=E3=81=AE=E5=9E=8B=E3=82=92=E7=94=9F=E6=88=90=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E8=AA=AC=E6=98=8E=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## å¯žčąĄč€… - [x] 📖 čǭ者 ## Problem 「ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰ãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽåž‹ã‚’į”Ÿæˆã™ã‚‹ã€ãƒšãƒŧã‚¸ã§ã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型をäŊŋãŖãĻã„ã‚‹įŽ‡æ‰€ã‚’ Mapped Types としãĻčĒŦ明しãĻいぞした。そぎため、čĒ­č€…ãŒ TypeScript ぎ抟čƒŊ名と構文ぎ寞åŋœã‚’čĒ¤ãŖãĻį†č§Ŗã™ã‚‹å¯čƒŊ性がありぞした。 ## Solution 芲åŊ“ペãƒŧジぎčĒŦ明を Mapped Types ã‹ã‚‰ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型ãĢäŋŽæ­Ŗã—ぞした。 - čĻ‹å‡ēã—ã‚’ã€Œã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型」ãĢ変更しぞした - æ—ĸå­˜ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型ペãƒŧジへぎãƒĒãƒŗã‚¯ã‚’čŋŊ加しぞした - ぞとめぎčĒŦæ˜Žã‚’ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型ぎ構文ãĢ合わせぞした ## Value čĒ­č€…ãŒ `typeof conf` と `[Language]` をįĩ„ãŋåˆã‚ã›ãŸåž‹ã‚’ã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型としãĻæ­Ŗã—ãį†č§Ŗã§ãã‚‹ã‚ˆã†ãĢãĒりぞす。 --- Close #1124 --- .prettierignore | 1 + docs/tips/generates-type-from-object-property.md | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.prettierignore b/.prettierignore index 702e3571..4c7275e1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,4 +15,5 @@ pnpm-lock.yaml /regression-test/issues /regression-test/workspace +/refs /.devbox diff --git a/docs/tips/generates-type-from-object-property.md b/docs/tips/generates-type-from-object-property.md index 3df963a5..87763b72 100644 --- a/docs/tips/generates-type-from-object-property.md +++ b/docs/tips/generates-type-from-object-property.md @@ -29,13 +29,13 @@ type ConfirmationMessage = ## äģŠå›žãŽå•éĄŒã‚’č§ŖããĢã‚ãŸãŖãĻ -äģŠå›žã¯äģŠãžã§į´šäģ‹ã—ãĻきたã‚Ēブジェクトから型をäŊœã‚Šå‡ēã™æ–šæŗ•ã¨ Mapped Types ãŽåˆã‚ã›æŠ€ã§å†įžã™ã‚‹ã“ã¨ãŒã§ããžã™ã€‚ +äģŠå›žã¯äģŠãžã§į´šäģ‹ã—ãĻきたã‚Ēブジェクトから型をäŊœã‚Šå‡ēã™æ–šæŗ•ã¨ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģã‚šåž‹ãŽåˆã‚ã›æŠ€ã§å†įžã™ã‚‹ã“ã¨ãŒã§ããžã™ã€‚ [ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰åž‹ã‚’į”Ÿæˆã™ã‚‹](generates-type-from-object.md) [ã‚ĒブジェクトからキãƒŧãŽåž‹ã‚’į”Ÿæˆã™ã‚‹](generates-type-from-object-key.md) -ã‚ĸプロãƒŧãƒãŽæ–šæŗ•ã¨ã—ãĻはぞずã‚ĒブジェクトからキãƒŧãŽåž‹ã‚’į”Ÿæˆã— Mapped Types をäŊŋいã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽåž‹ã‚’å‚į…§ã€ãã‚Œã‚‰ã‚’ãƒĒテナãƒĢ型で取垗しぞす。 +ã‚ĸプロãƒŧãƒãŽæ–šæŗ•ã¨ã—ãĻはぞずã‚ĒブジェクトからキãƒŧãŽåž‹ã‚’į”Ÿæˆã—ã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģ゚型をäŊŋいã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽåž‹ã‚’å‚į…§ã€ãã‚Œã‚‰ã‚’ãƒĒテナãƒĢ型で取垗しぞす。 ### キãƒŧãŽåž‹ã‚’į”Ÿæˆã™ã‚‹ @@ -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 = { @@ -74,7 +74,7 @@ type ConfirmationMessage = (typeof conf)[Language]; // ^? ``` -### ãƒĒテナãƒĢ型を取垗するできるようãĢする +### ãƒĒテナãƒĢ型を取垗できるようãĢする こぎぞぞだとã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰åž‹ã‚’į”Ÿæˆã™ã‚‹ã¨åŒã˜ã‚ˆã†ãĢ型はãƒĒテナãƒĢ型ではありぞせん。つぞりただぎ`string`型ぎãƒĻニã‚Ēãƒŗåž‹ã¤ãžã‚Š`string`型です。そこで、元ぎã‚Ēブジェクト`conf`ãĢ`as const`をつけぞす。 @@ -90,7 +90,7 @@ const conf = { ## ぞとめ -おåĨŊãŋã§åŽšįžŠã—ãŸã‚­ãƒŧぎ型`Language`を Mapped Types ぎキãƒŧぎ部分ãĢäģŖå…Ĩしぞす。最įĩ‚įš„ãĒåŊĸはæŦĄãŽã‚ˆã†ãĢãĒりぞす。 +おåĨŊãŋã§åŽšįžŠã—ãŸã‚­ãƒŧぎ型`Language`ã‚’ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ĸクã‚ģã‚šåž‹ãŽãƒ–ãƒŠã‚ąãƒƒãƒˆå†…ãĢ指厚しぞす。最įĩ‚įš„ãĒåŊĸはæŦĄãŽã‚ˆã†ãĢãĒりぞす。 ```ts twoslash const conf = {