用打字稿

时间:2019-11-03 16:04:28

标签: typescript

我有一个nosql数据库,在该数据库中我知道文档的架构。在我的React应用中,我有一个略有不同的架构。我想在打字稿中定义两个接口,以及从一个接口转换为另一个接口。

以下代码可以正常工作

interface backendPersons {
    [id: string]: {
        name: string;
        hairColor: string;
    };
}

interface appPersons {
    [id: string]: {
        id: string;
        name: string;
        hairColor: string;
    };
}

type Transformer<fromType, toType> = (data: fromType) => toType;

const personsTransformer: Transformer<backendPersons, appPersons> = data => {
    let res: appPersons = {};
    for (let k of Object.keys(data)) {
        res[k] = {...data[k], id: k}
    }
    return res
};

const backendPerson = {
    'john': {
        name: 'John Doe',
        hairColor: 'black'
    }
}
const appPerson = personsTransformer(backendPerson);

但是可以说我想拥有更通用的转换器功能,因为我必须对一堆接口进行相同的转换。我有以下内容,但不起作用( TS2322 TS7053

const transformer = <fromType, toType>(data: fromType): Transformer<fromType, toType> => {
    let res: toType = {};
    for (let k of Object.keys(data)) {
        res[k] = {...data[k], id: k}
    }
    return res
}
const appPersons = transformer<backendPersons, appPersons>(backendPerson);

实际上,我想扩展功能,以便内部转换不仅是{...data[k], id: k},还可以是给定的datak作为可选参数的任何转换。 transformer呼叫。

0 个答案:

没有答案