Ошибка TypeScript при динамической установке цвета для пакета `chalk` - PullRequest
0 голосов
/ 15 октября 2019

Пакет chalk очень популярен для терминальных стилей в Node.

Я использую TypeScript. Я пытаюсь установить цвет динамически. Но я получаю ошибку TS при компиляции.

Код:

import chalk, { Chalk } from 'chalk';

function getColor(): keyof Chalk {
  let color: keyof Chalk = 'green';

  color = 'yellow';

  return color;
}

const chalkColor = getColor();

// Error on `chalk[chalkColor]`
console.log(chalk[chalkColor]('message'));

Ошибка (при chalk[chalkColor]):

This expression is not callable.
  Not all constituents of type 'boolean | (Chalk & { supportsColor: ColorSupport; }) | (ChalkConstructor & Function) | Level | ((r: number, g: number, b: number) => Chalk & { supportsColor: ColorSupport; }) | ... 10 more ... | ((color: string) => Chalk & { ...; })' are callable.
    Type 'false' has no call signatures.

Как я могу устранить эту ошибку

1 Ответ

0 голосов
/ 15 октября 2019

Хорошо, так что я понял это вскоре после. Но я оставлю этот вопрос на всякий случай, если у кого-то есть лучшее решение. Я использовал перечисление, содержащее цвета, которые я собирался использовать. Это, похоже, решило проблему.

import chalk from 'chalk';

enum ChalkColor {
  Green = 'green',
  Yellow = 'yellow',
}

function getColor(): ChalkColor {
  let color = ChalkColor.Green;

  color = ChalkColor.Yellow;

  return color;
}

const chalkColor = getColor();

console.log(chalk[chalkColor]('message'));

Другое решение заключается в использовании (chalk[chalkColor] as Chalk), например так:

import chalk, { Chalk } from 'chalk';

function getColor(): keyof Chalk {
  let color: keyof Chalk = 'green';

  color = 'yellow';

  return color;
}

const chalkColor = getColor();

console.log((chalk[chalkColor] as Chalk)('message'));
...