Рассмотрим простую попытку создания функции приведения типов:
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)
не работает, очевидно).