jschuur / chatgpt-repl

Interactive CLI for ChatGPT
https://npmjs.com/package/chatgpt-repl
13 stars 0 forks source link

Refactor: Simplify TypeScript in setSettings #55

Open jschuur opened 1 year ago

jschuur commented 1 year ago

This mess of code with explicit individual references to settings was needed to not get TypeScript errors (details on Stackoverflow):

function setSetting(setting: Setting, value: SettingsTypes) {
  // all this to keep typescript happy. there has to be a better way?
  // https://stackoverflow.com/questions/75809343/type-string-number-is-not-assignable-to-type-never-when-dynamically-settin/75809489#75809489
  if ((setting === 'maxTokens' || setting === 'historyLength') && typeof value === 'number')
    settings[setting] = value;
  if (
    (setting === 'model' || setting === 'system' || setting === 'apiKey') &&
    typeof value === 'string'
  )
    settings[setting] = value;
  if ((setting === 'wordWrap' || setting === 'clipboard') && typeof value === 'boolean')
    settings[setting] = value;

  console.log(`${pc.cyan(setting.toLowerCase())} set to ${pc.magenta(String(value))}`);
}

See if something can be done, since now every time a new setting is added, it needs to go into the right if block.