тип потока, безопасное приведение типа с использованием универсальной функции - PullRequest
0 голосов
/ 06 апреля 2019

Рассмотрим простую попытку создания функции приведения типов:

function Convert<T>(value:mixed, converter:string):T {
  if (typeof value === typeof converter) {
    return (value:T)
  }
  throw new OperationalError('Type mismatch')
}

Использование будет:

const o = JSON.parse('{"stringval":"hello", "numval":1}');
const s:string = convert<string>(o.stringval, "string");
const n:number = convert<number>(o.numval, "number");

Это, очевидно, не удастся, потому что нельзя привести "mixed" (значение) куниверсальный "Т".Однако, глядя на код, мы можем видеть непосредственно, что он «должен» работать, и есть способ, которым мы можем узнать типы динамически.(Если это неправильный тип во время выполнения, выдается ошибка).

Как бы я создал такую ​​функцию в потоке?Могу ли я основать тип шаблона на вставленном значении (вместо типа)?

Или я могу проверить динамически на основе данного типа?(if (typeof value === T) не работает, очевидно).

...