valueの型を指定したオブジェクトからkeyof typeofでkeyのユニオン型を作る


valueの型を指定したオブジェクトがあります。

[code]

    export type SingleTextEditorParamList = {
      title: string;
      value: string | undefined;
      onSubmit: (text: string) => Promise<void>;
      note?: React.ReactNode;
    };
    
    const SingleTextEditorParams: Record<string, SingleTextEditorParamList> = {
      a: {...省略},
      b: {...省略},
      c: {...省略},
      d: {...省略} 
    };
    
[/code]

SingleTextEditorParamsから`a|b|c|d`の型を作ることは可能でしょうか？

[code]

    type SingleTextEditorParamKeys = keyof typeof SingleTextEditorParams;
    
[/code]

これだと`string`になってしまいます。

[code]

    const SingleTextEditorParams: {[key: string]: SingleTextEditorParamList} = {省略}
    
[/code]

これも試しましたが`string | number`になりました。

[code]

    type SingleTextEditorParamKeys = a|b|c|d;
    
    const SingleTextEditorParams: {[key in SingleTextEditorParamKeys]: SingleTextEditorParamList} = {省略}
    
[/code]

ってすると、キーが増えた時、二箇所にキーを追加するのが冗長なので嫌だなと思いまして。もし方法があったら教えてください。




型アノテーションをつけない `SingleTextEditorParams` (仮に `UntypedSingleTextEditorParams`
とします) を先に作り、  
`SingleTextEditorParamKeys` は `keyof typeof UntypedSingleTextEditorParams`
とするのはいかがですか。

[code]

    const UntypedSingleTextEditorParams = {
        a: ...,
        b: ...,
        c: ...,
        d: ...,
    };
    
    type SingleTextEditorParamKeys =
        keyof typeof UntypedSingleTextEditorParams;
    
    const SingleTextEditorParams
        : Record<SingleTextEditorParamKeys, SingleTextEditorParamList>
        = UntypedSingleTextEditorParams;
    
[/code]

