可能获得typeof泛型类型参数?

时间:2020-10-22 01:27:02

标签: typescript typescript-generics

我正在编写一个简单的解串器,该解串器适用于任何类型的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 };

0 个答案:

没有答案