質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

0回答

718閲覧

Visual Studio Code で、colorオブジェクトに型の補完が欲しい.

kuro3

総合スコア27

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2020/11/07 06:38

前提・実現したいこと

Visual Studio Code で, 以下の制約を満たす color.ts を作成したい。

質問

colorオブジェクトに型の補完を実現しながら、別ファイルからは、オブジェクトリテラル型に見える方法はありますか? または、JSDocとかでcolorの型補完を実現する方法はありますか?

ある場合、TypeSript Playgroundにサンプル例をお願いします。 m(_ _)m
または、代替案や改善案などがあれば助かります。

制約

  • colorオブジェクトにColorの型補完(300, 'default', ...)
  • 可能な限り、Color型を変更不可
  • config.tsを変更不可

発生している問題・エラーメッセージ

Visual Studio Code で、color.ts の colorオブジェクトに型の補完がない。(colorオブジェクトの中身を間違えたときにコンパイルエラーが発生しない)

該当のソースコード

color.ts他 | TypeSctipt Playground

typescript

1// test.ts (for assert type) 2// FYI: https://qiita.com/kgtkr/items/2a8290d1b1314063a524 3export type TypeEq<A, B> = (<T>() => T extends A ? 1 : 2) extends (< 4 T 5>() => T extends B ? 1 : 2) 6 ? true 7 : false 8 9export function assertType<_T extends true>() {} 10export function assertNotType<_T extends false>() {} 11 12// color.ts 13// export const color: Color = { 14export const color = { 15 black: { 16 // TODO: config.tsの中身を変更せずに、Color('300', ...)型の補完が欲しい!! 17 '100': '#595959', 18 '200': '#404040', 19 '400': '#383838', 20 '600': '#2e2e2e', 21 '800': '#262626', 22 '900': '#0d0d0d', 23 default: '#333333', 24 }, 25 white: { 26 '100': '#fff', 27 '400': '#f9fafb', 28 '600': '#edeff2', 29 '800': '#e4e7ec', 30 '900': '#c7ccd6', 31 default: '#f4f5f7', 32 }, 33} 34 35export type Color = { 36 [color in string]: Partial<{ 37 [num in Numbers]: string; 38 }> 39} 40 41type Numbers = 42 | '100' 43 | '200' 44 | '300' 45 | '400' 46 | '500' 47 | '600' 48 | '700' 49 | '800' 50 | '900' 51 | 'default'; 52 53// config.ts 54// import { colors } from './color.ts'; 55// import { assertType } from './test.ts'; 56 57type ExpectedColor = { 58 black: { 59 '100': string; 60 '200': string; 61 '400': string; 62 '600': string; 63 '800': string; 64 '900': string; 65 default: string; 66 }; 67 white: { 68 '100': string; 69 '400': string; 70 '600': string; 71 '800': string; 72 '900': string; 73 default: string; 74 }; 75} 76 77// TODO: color type should be ExpectedColor 78assertType<TypeEq<typeof color, ExpectedColor>>() 79 80export const config: Config = { 81 dark: { 82 background: color.black.default, 83 foreground: color.white.default, 84 }, 85 light: { 86 background: color.white[800], 87 foreground: color.black[600], 88 } 89} 90 91type Config = { 92 [theme in 'dark' | 'light']: { 93 background: string; 94 foreground: string; 95 } 96}

試したこと

  1. color.tsのconst color = {とした。制約1を満たさない。
  2. ColorのPartialを外した。assertType<TypeEq<typeof color, ExpectedColor>>()を満たさない。
  3. color.tsの// export const color: Color = { のコメントを外した。制約3を満たさない。

質問(再掲)

colorオブジェクトに型の補完を実現しながら、別ファイルからは、オブジェクトリテラル型に見える方法はありますか?
または、JSDocとかでcolorの型補完を実現する方法はありますか?
ある場合、TypeSript Playgroundにサンプル例をお願いします。 m(_ _)m

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問