我正在编写一个简单的解串器,该解串器适用于任何类型的State
。有什么方法可以获取泛型类型参数的具体类型?代码示例如下所示。
type ValType = number | boolean;
interface State {
[index: string]: ValType;
}
function serialize(x: ValType): string {
if (typeof x === 'number') {
return `n${x}`;
} else {
return `b${x}`;
}
}
// return dummy values instead of reading from string
function deserialize(x: string, type: string): ValType {
if (type === 'number') {
return 0;
} else {
return false;
}
}
function serializeState<T extends State>(s: T): string {
let ret = '';
Object.values(s).forEach(v => {
ret += serialize(v);
})
return ret;
}
function deserializeState<T extends State>(s: string): T {
// ???? how to get keys and value types from T ???? <--------------------------
// e.g., ['number', 'boolean']
const types = [];
// e.g., ['counter', 'isDone']
const keys = [];
// deserialize based on actual types
T ret;
for (let i = 0; i < types.length; i++) {
ret[keys[i]] = deserialize(s, types[i]);
}
return ret;
}
interface StateA extends State {
counter: number;
isDone: boolean;
}
const s: StateA = { counter: 1, isDone: false };
const str = serializeState(s);
console.log(deserializeState<StateA>(str));
// expected: { counter: 1, isDone: false };