考虑创建类型转换函数的简单尝试:
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");
这显然失败了,因为不能将“混合”(值)转换为通用“ T”。但是通过查看代码,我们可以直接看到它“应该”工作,并且有一种方法可以动态地知道类型。 (如果它在运行时不是正确的类型,则会引发错误。)
如何在流程中创建这样的功能?可以将模板类型基于插入的 value (而不是类型)吗?
或者我可以根据给定的类型动态地测试吗? (if (typeof value === T)
显然不起作用)。